تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] ارجو المساعدة بسرعة : كيف اصل الى متحول في كلاس اب من خلال كلاس ابن
#1
السلام عليكم

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

مثال :


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

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

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

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

و شكرا جزيلا اعزائي
الرد }}}}
تم الشكر بواسطة:
#2
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 : Microsoft Partner  & Systems Developer
الرد }}}}
تم الشكر بواسطة: الوليد ☺
#3
شكرا اخي Abu Ehab
كلامك صحيح هذا الحل ممكن لكن انا لا اريد ان اجعل هذا المتحول مشترك لانه لن يحمل قيمة واحدة في كل الكائنات التي سأنشها من نوع الكلاس AnyThing و لذلك اريد حل بدون جعل المتحول مشترك
الرد }}}}
تم الشكر بواسطة:
#4
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 

Abu Ehab : Microsoft Partner  & Systems Developer
الرد }}}}
تم الشكر بواسطة: الوليد ☺
#5
اكيد عم تقول و الله هلكتني يا شيخ بس اسف على على اتعابك

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

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

Abu Ehab : Microsoft Partner  & Systems Developer
الرد }}}}
تم الشكر بواسطة: م.حسن , الوليد ☺ , sooriaty03
#7
السلام عليكم ورحمة الله وبركاته

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


كود :
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



بالتوفيق




الرد }}}}
تم الشكر بواسطة: الوليد ☺
#8
السلام عليكم

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

أولا : أنك تحول أي دالة داخل الكلاس الفرعي إلى 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()
الرد }}}}
تم الشكر بواسطة: الوليد ☺
#9
الحل سيكون بالشكل التالي


كود :
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
الرد }}}}
تم الشكر بواسطة: الوليد ☺


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  ار جو المساعدة ما هي مشكلة كود التعديل والحذف boofa2015 2 56 21-02-17, 10:58 AM
آخر رد: boofa2015
Lightbulb للخبراء هل توجد مكتبة او اداة لعمل مثل هذا النموذج عن طريق vb.net ارجو المساعدة Amrjamil 6 102 18-02-17, 02:19 PM
آخر رد: Amrjamil
  السلام عليكم .... ارجوا المساعدة في الجمع التكست بوكس محمد بوقزاحة 8 154 08-02-17, 11:50 AM
آخر رد: محمد بوقزاحة
  السلام عليكم .... ارجوا المساعدة محمد بوقزاحة 2 94 01-02-17, 07:05 PM
آخر رد: محمد بوقزاحة
  السلام عليكم .... ارجوا المساعدة محمد بوقزاحة 11 258 31-01-17, 08:22 PM
آخر رد: محمد بوقزاحة
  ارجوا المساعدة محمد بوقزاحة 2 77 29-01-17, 12:30 AM
آخر رد: محمد بوقزاحة
  [سؤال] ما هو الخطأ في الكود التالي .. أرجو المساعدة abo_alaa315 0 73 22-01-17, 02:27 PM
آخر رد: abo_alaa315
  ارجوا المساعدة في برنامج محاسبة فيجوال بيسك 2008 محمد بوقزاحة 8 278 19-01-17, 01:30 PM
آخر رد: محمد بوقزاحة
  ياشباب ارجو المساعده رنامج لا جلب اي قاعده بيانات في الجهاز اكسس او اكسل وعرضها ammaraliali 5 181 15-01-17, 06:11 PM
آخر رد: khodor1985
  ياشباب ارجو منكم المساعده لدي مشاكل في اضافه الصورة الى قاعده البيانات وعمل بحث ammar ali 3 233 13-01-17, 11:15 PM
آخر رد: ammaraliali

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم