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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Thumbs Up برنامج إدارة الجمعيات الخيرية مفتوح المصدر... الرجاء المساعدة Arabia 46 1,414 منذ 10 ساعة مضت
آخر رد: tryold
  [سؤال] تسجيل دخول الفيس من خلال تطبيق ابو روضة 0 29 09-12-16, 03:55 PM
آخر رد: ابو روضة
  ارجو المساعدة في كود VB.NET 7 112 16-11-16, 03:20 AM
آخر رد: أبو عمر
  اسف تم عمل 2 موضوع بالخطاء ارجو اذالة هذه الموضوع Mohamed20 0 59 02-11-16, 11:47 PM
آخر رد: Mohamed20
Exclamation الرجاء المساعدة : كيف اخفى او اشفر كلمة السر لقاعدة بيانات من ملف App.config noway 2 93 28-10-16, 07:58 PM
آخر رد: noway
Lightbulb المساعدة في معرفة طريقة كتابة الأكواد بشكل صحيح ... Arabia 0 74 26-10-16, 03:18 PM
آخر رد: Arabia
  [سؤال] أريد أن أصنع برنامج يمثل الدوال أرجو المساعدة Bettayeb 4 409 20-10-16, 10:54 PM
آخر رد: Bettayeb
  [VB.NET] رجاء المساعدة:سؤالي عن التقارير في الفيجوال بيسك دوت نت Asmaa adel 2 118 20-10-16, 09:41 AM
آخر رد: Asmaa adel
Information المساعدة في كيفية : التحديد في الداتاقريد ... Arabia 4 160 18-10-16, 10:50 AM
آخر رد: Arabia
  [سؤال] رجاء المساعدة البرنامج لا يعمل تحديث للبيانات Asmaa adel 3 164 16-10-16, 09:48 AM
آخر رد: Asmaa adel

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


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