تقييم الموضوع :
  • 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
 Youtube   Facebook    Twitter   
الرد }}}
تم الشكر بواسطة: الوليد ☺
#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
 Youtube   Facebook    Twitter   
الرد }}}
تم الشكر بواسطة: الوليد ☺
#5
اكيد عم تقول و الله هلكتني يا شيخ بس اسف على على اتعابك

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

شكرا اخي و لكن الحل غير صحيح هل تفكر بشيء ما ؟؟؟
الرد }}}
تم الشكر بواسطة:
#6
لا يهمك ,,, هو يوم الخميس بالليل بكون في العاده متفرغ ...
طيب شوف :
أستخدم Select Case بدلا من If ...
أو شوف الشباب يساعدوك .
يعطـــــيك العافية
Abu Ehab : Microsoft Partner  & Systems Developer
 Youtube   Facebook    Twitter   
الرد }}}
تم الشكر بواسطة: م.حسن , الوليد ☺ , 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
الرد }}}
تم الشكر بواسطة: الوليد ☺


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  ارجو التعديل على الدالة المرفقة - الدالة تعيد الرقم -1 new_programer 4 91 20-03-24, 01:18 PM
آخر رد: تركي الحلواني
  [VB.NET] تحديث بيانات فى كلاس من جدول سيكوال asdfar1977 6 184 26-02-24, 01:07 AM
آخر رد: asdfar1977
  كيفية انشاء سكريبت لقاعدة بيانات من خلال الكود heem1986 1 194 20-02-24, 12:00 AM
آخر رد: Kamil
  التحقق من خلال محتوى خلية عن طريق textbox صالح عبدالله 2 222 24-01-24, 12:54 PM
آخر رد: صالح عبدالله
  ارجو الافادة للضرورة mohamed sabry 1 110 13-01-24, 03:37 AM
آخر رد: Taha Okla
  ارجو المساعدة فى شاشة طباعة الباركود new_programer 10 577 09-01-24, 08:41 PM
آخر رد: new_programer
  معرفة عدد الاشهر خلال فترة زمنيةمعينة boofa2022 0 170 01-01-24, 01:18 PM
آخر رد: boofa2022
  المساعدة - في تفعيل نسخة VB 2015 emamtron2014 2 5,103 24-12-23, 05:08 AM
آخر رد: laban
  [نقاش] أساتذتنا مشرفى المنتدى المساعدة و الدعم فى Telerik dr.programming 6 381 21-12-23, 12:29 AM
آخر رد: dr.programming
  رجاء التعديل على الكود المرفق - كلاس لعرض كود المورد new_programer 4 357 13-10-23, 01:47 AM
آخر رد: new_programer

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


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