منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : ارجو المساعدة بسرعة : كيف اصل الى متحول في كلاس اب من خلال كلاس ابن
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم

كيف يمكنني الوصول الى عنصر موجود في كلاس اب من خلال تابع في كلاس ابن بدون تطبيق مبدأ الوراثة

مثال :


Public Class Form1

Class AnyThing

Public Thing_Type As String

Public P As New Person
Public C As New Car


Class Person
Public Sub Show_Thing_Type()
If Thing_Type = "Person" Then MsgBox("Person")
If Thing_Type = "Car" Then MsgBox("Car")
End Sub
End Class

Class Car
Public Sub Show_Thing_Type()
If Thing_Type = "Person" Then MsgBox("Person")
If Thing_Type = "Car" Then MsgBox("Car")
End Sub
End Class

End Class


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim T As New AnyThing

T.Thing_Type = "Person"

T.P.Show_Thing_Type()

End Sub
End Class


المشكلة ان الحصول على قيمة المتحول Thing_Type من داخل الكلاسات Person و Car غير ممكن و يظهر لي خطأ :
Reference to a non-shared member requires an object reference

حسب ما فهمت انه لا يمكن الوصول الى هذا المتحول من خلال الكلاس لانه غير مشترك و انه يمكن الوصول اليه فقط من خلال الكائن

ارجو مساعدتي لحل هذه المشكلة

طبعا اعرف انه يمكن ان اضع التوابع هذه في الكلاس الاساسية و لكن هذا مثال فقط و انا اريد حل المشكلة و ليس تصحيح الكود

و شكرا جزيلا اعزائي
PHP كود :
Public Class Form1

End 
Class

Class 
AnyThing

    Public Shared Thing_Type 
As String

    Public P 
As New Person
    Public C 
As New Car


    Class Person
        Public Sub Show_Thing_Type
()
 
           If Thing_Type "Person" Then MsgBox("Person")
 
           If Thing_Type "Car" Then MsgBox("Car")
 
       End Sub
    End 
Class

 
   Class Car
        Public Sub Show_Thing_Type
()
 
           If Thing_Type "Person" Then MsgBox("Person")
 
           If Thing_Type "Car" Then MsgBox("Car")
 
       End Sub
    End 
Class

End Class 

بالسي شارب نستخدم Static
شكرا اخي Abu Ehab
كلامك صحيح هذا الحل ممكن لكن انا لا اريد ان اجعل هذا المتحول مشترك لانه لن يحمل قيمة واحدة في كل الكائنات التي سأنشها من نوع الكلاس AnyThing و لذلك اريد حل بدون جعل المتحول مشترك
Okey :


PHP كود :
Public Class Form1

End 
Class

Class 
AnyThing

    Enum Thing_Type
        Person
        Car

    End Enum

    Public P 
As New Person
    Public C 
As New Car


    Class Person
        Public Sub Show_Thing_Type
()
 
           If Thing_Type.Person Then MsgBox("Person")
 
           If Thing_Type.Car Then MsgBox("Car")
 
       End Sub
    End 
Class

 
   Class Car
        Public Sub Show_Thing_Type
()
 
           If Thing_Type.Person Then MsgBox("Person")
 
           If Thing_Type.Car Then MsgBox("Car")
 
       End Sub
    End 
Class

End Class 
اكيد عم تقول و الله هلكتني يا شيخ بس اسف على على اتعابك

يا اخي انت هيك حذفت المتحول كلو و ما خليت شي اسند الو قيمة و انت وضعت شرط في IF عبارة Thing_Type.Car او Thing_Type.Person و ستكون نتيجة تنفيذ هذا الشرط دائما اظهار المسج بوكس "Car" لان قيمة Person =0 و قيمة Car=1 و يتحقق الشرط عند قيمة غير مساوية للصفر

شكرا اخي و لكن الحل غير صحيح هل تفكر بشيء ما ؟؟؟
لا يهمك ,,, هو يوم الخميس بالليل بكون في العاده متفرغ ...
طيب شوف :
أستخدم Select Case بدلا من If ...
أو شوف الشباب يساعدوك .
يعطـــــيك العافية
السلام عليكم ورحمة الله وبركاته

هناك حل وهو أن تمرر نفس الكلاس الذي قمت بتعريفه إلى الكلاسات الفرعية
وذلك بالطريقة التالية:


كود :
Public Class Form1

    Class AnyThing
        Public Thing_Type As String
        Public P As New Person(Me)
        Public C As New Car(Me)
        
        Class Person
            Private AnyThing_ As AnyThing
            Sub New(ByVal [AnyThing] As AnyThing)
                AnyThing_ = [AnyThing]
            End Sub
            Public Sub Show_Thing_Type()
                If AnyThing_.Thing_Type = "Person" Then MsgBox("Person")
                If AnyThing_.Thing_Type = "Car" Then MsgBox("Car")
            End Sub
        End Class

        Class Car
            Private AnyThing_ As AnyThing
            Sub New(ByVal [AnyThing] As AnyThing)
                AnyThing_ = [AnyThing]
            End Sub
            Public Sub Show_Thing_Type()
                If AnyThing_.Thing_Type = "Person" Then MsgBox("Person")
                If AnyThing_.Thing_Type = "Car" Then MsgBox("Car")
            End Sub
        End Class
    End Class

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim T As New AnyThing

        T.Thing_Type = "Car"

        T.P.Show_Thing_Type()
    End Sub
End Class



بالتوفيق




السلام عليكم

في الحقيقة الوصول إلى كلاس فرعي أو دوال كلاس فرعي  من كلاس رئيسي  يتم عن طريق حالتين فقط هما :

أولا : أنك تحول أي دالة داخل الكلاس الفرعي إلى Shared بمعنى مُشَارَك :

كود :
Public Class Parent

Public Class Child

Public Shared Sub A()

End Sub

End Class

End Class

ستكون إمكانية الوصول لدوال الكلاس الفرعي كالتالي :

كود :
Parent.Child.A()

ثانيًا : وهي عن طريق إنشاء كائن من الكلاس الفرعي ( الوراثة )

كود :
Public Class Parent

Public Class Child

Public Sub A()

End Sub

End Class

End Class

وتكون إمكانيةالوصول لدوال الكلاس الثاني كالتالي :

كود :
Dim obj As New Parent.Child
obj.A()
الحل سيكون بالشكل التالي


كود :
Public Class Form1

   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       Dim anythingClass As New AnyThing
       anythingClass.AnythingString = "Person"
       anythingClass.Anyperson.AnythingString = anythingClass.AnythingString
       anythingClass.Anyperson.ShowAnything()
   End Sub
End Class


Public Class AnyThing
   Public AnythingString As String
   Public Anyperson As New Person
End Class

Public Class Person

   Public AnythingString As String
   Public Sub ShowAnything()
       If Me.AnythingString = "Person" Then
           MessageBox.Show(Me.AnythingString.ToString)
       End If
   End Sub
End Class