الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

How to find Property in Class

مغلق
بدأه Ahmed H. Alawady في 27 أبريل 2006 · 6 رد · 569 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

أخواني الأعزاء يوجد لدي أسماء موجودة في string ومنها أريد تحديد كل من

NameSpace

Class

Function

Property

يعني أقصد لو كان لدي إسم Property وأريد القيمة الموجودة بداخلة ولا أملك غير أنه معي إسمه في string فكيف أصل إليه

وبالمثل NameSpace , Class , Function

ولا أريد إستخدام Interfaces

هل أوضحت ما أريد أم يوجد مشكلة في شرحي

ملحوظة هامة للمشرفين :

يوجد خطأ في العنوان أرجوا تعديلها بدلا من Parameter تكون Property

تم تعديل هذه المشاركة بواسطة Ahmed H. Alawady في 27 أبريل 2006 في 14:32

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#2

للتوضيح :

Public Class MyClass
{
      Public int MyProperty
      {
             Get{ return 0;}
      }
}

ويوجد لدي إسمها "MyProperty" في string

string Prop = "MyProperty";

فهل من الممكن أن أتعامل مع Property عن طريق إسمها فقط

؟؟؟؟؟

تم تعديل هذه المشاركة بواسطة Ahmed H. Alawady في 27 أبريل 2006 في 14:33

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#3

أكيد تقدر تستدعى Property or method عن طريق إسمها بس أهم حاجة لازم يكون الproperty or method داخل DLL وانتا عاوز تستخدم الDLL وذلك عن طريق الLate Binding and Reflection

يستخدم الReflection فى طباعة مثلا محتوى الDLL ومعرفة مثلا محتواها وهل IsAbstractأوIsEnumأوIsSealed وهكذا (دى بعض الامثلة البسيطة) أما الlateBinding هستخدمها فى إستخدام الDLL .

ودة تعريف الLate Binding للتوضيح أكثر

technique in which you are able to create an instance of a given type
and invoke its members at runtime without having compile-time knowledge of its existence.

إذا كنت تقصد هذا فإليك هذا المثال لتوضيح الكلام :)

على إفتراض ان انا عندى DLL إسمها ArabTeam بها two accessor gets/sets للage,name كما موضح

private string name = "Mohammed Allam";

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        private int age = 19;

        public int Age
        {
            get { return age; }
            set { age = value; }
        }

تمام

أنا عاوز أستخدم الDll على إفتراض مثلا ان أحد الاشخاص عاملها بس أنا مش عارف اللى فيها لازم بفتح الDLL بإستخدام الildasm.exe ومعرفة ما بداخلها وبعد ذلك أبدا استخدم اللى انا عاوزو. عرفت عن طريق الCIL Code أن الDLL بها property

إسمها Name وانا عاوز أستخدمها ف الرنامج بتاعى

أول حاجة أروح للDirectory بتاع البرنامج\LateBindingEX\LateBindingEX\bin\Debug وأحط الDLL

وبعد كدة فى البرنامج اللى انا عاوز أستخدم فية تلك الDLL لازم أتبع التالى

يبقى أول حاجة لازم أعمل load للArabteam.dll وبعد كدة هجيب الtype اللى أنا عاوزوة علشان أقدر أخد object منة

Assembly asm = null;
            try
            {
               asm = Assembly.Load("Arabteam");
            }
            catch(IOException e)
            {
                
              Console.WriteLine(e.Message);
                Console.ReadLine();

            }

            // Get metadata for the Person type class.
            Type PersonType= asm.GetType("Arabteam.Person");

وبعد ما حصلت على الtype اللى أنا محتاجة هبدأ بعمل object من ذلك الType كما موضح

  // Create the PersonType on the fly.
            object obj = Activator.CreateInstance(PersonType);

وبكدة أقدر أستخدم الobj لاستدعاء الدوال الموجودة داخل الDLL ولكن بطريقة غير مباشرة الى حد ما

 //Get Name property and provide access to this property.
            PropertyInfo property = PersonType.GetProperty("Name");

            //get value of this property. 
            //Getvalue has two argument 1st is the object property whose value will be returned.
            //second is  represent parameters to method or index to properities.
            string name = property.GetValue(obj,null).ToString();
            Console.WriteLine(name);

وبكدة رجعت القيمة الموجودة داخل المتغير name عن طريق الget

تمام كدة طب لو حبيت أغير فى القيمة عن طريق الSet

 property.SetValue(obj, "Ahmed",null);

قبل كل دة لازم أعمل تضمين الى ال?Reflection namespace

using System.Reflection;

ستجد فى المرفقات الDLL وبرنامج مستخدم الDLL عن طريق الlatebinding

يارب أكون وضحتلك شيى ما يفيدك وأعتذر عن التطويل :)

LateBindingEX.rar

Muhammad Allam

Computer Science

@Resource(MappedURL="My Blog" )

#4

جزاك الله كل خير ، جاري التجربة

ثم أوافيك بالرد إن شاء الله

بالمناسبة هذا المشروع بواسطة 2005 فهل يوجد أي إختلاف عن 2003 ، لأني أستخدم 2003 ؟

ثانيا : ما هو Person الموجود في هذا السطر

Type PersonType= asm.GetType("Arabteam.Person");

تم تعديل هذه المشاركة بواسطة Ahmed H. Alawady في 27 أبريل 2006 في 20:57

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#5

Person دة عبارة عن إسم الclass وعلشان اخد object منة لازم أكتب

Arabteam.Person

وعلشان أستدعى أخد كائن من ذلك الclass باستدعية عن طريق إسم الnamespace مع العلم ان الperson ليس static class

Muhammad Allam

Computer Science

@Resource(MappedURL="My Blog" )

#6

يمكنك أن تقرأ عن الReflection فهو موضوع شيق

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#7

جزاكما الله خيرا

جاري البحث عن Reflection ، وشكرا على المعلومة القيمة

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

هذا الموضوع مغلق.

مواضيع مشابهة