• 0
MohamedAliSalim

كيفية الحصول على اسم الــ Chiled Class من Static Method في الـ Parent Class

سؤال

public class BaseManager

{

public static string GetClassName()

{

return MethodBase.GetCurrentMethod().DeclaringType.Name;

}

}

public class ChiledManager

{

}

------------------------------------------------------------------------------

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

string x = ChiledManager.GetClassName(); // Out put = ChiledManager

}

هذا ما أريده

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

5 إجابة على هذا السؤال .

  • 0

بما ان الـ class انت تعرف أنها موجوده يمكنك جعل الدالة GetClassName ذات محتوى صريح كالتالي:

public static string  GetClassName(){	return "ChiledManager";}

إذا لم ترد هذه الطريقة فستحتاج لوسيلة لمعرفة هذه الـ class من غيرها لأنها موجوده فى الـ main namespace و قد يكون معها العديد من الفئات الاخرى. أحد هذه الطرق هو ان تقوم بالتصريح عن interface فارغه و تقوم بتضمينها داخل الفئه ChiledManager و بذلك تستطيع الحصول عليها بإستخدام الـ reflection بكل سهولة:

using System;using System.Reflection;public interface IMarker { }public class ChiledManager : IMarker { }public class BaseManager{    public static string GetClassName()    {        Module[] mods = Assembly.GetExecutingAssembly().GetModules(false);        Type baseType = typeof(IMarker);        foreach (Module m in mods)        {            foreach (Type t in m.GetTypes())            {                if (t.IsClass && baseType.IsAssignableFrom(t)) return t.Name;            }        }        return string.Empty;    }}public class Entrypoint{    public static void Main()    {        Console.WriteLine(BaseManager.GetClassName());    }}

و الله ولي التوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أولا ً شكراً على ردك على موضوعي

ثانياً كلامك جميل ولكن الجملة الإخيرة هي صميم الموضوع

انت كاتب

Console.WriteLine(BaseManager.GetClassName());

وانا عاوز اكتب

Console.WriteLine(ChiledManager.GetClassName());

وأحصل على النتيجة "ChiledManager"

 

طبعا ً ال ChiledManager  مش هاشوف فيها الميثود دي علشان مش Inherted منها

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الدالة GetClassName غير موجوده فى الـ ChiledManager فكيف تريد إستدعائها منه؟

 

أرجو ان تضع مثال يشرح ما تريد أو تفصل أكثر ما تريد

 

 

و الله ولي التوفيق

تم تعديل بواسطه C++er
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

المثال كما ذكرت انا من قبل

انا اريد الحصول على اسم الــ Child Class من خلال Static Method موجودة في الــ Parent Class

بمعنى تاني

انا عاوز من اعرف الميثود اللي موجودة في الكلاس الاب تم استدعائه من انهي كلاس ابن لأنه يوجد اكثر من أبن لهذا الأب فأريد ان اعرف انهي أبن استخدم هذه الميثود

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لا يمكن الحصول على instance من خلال static method

استخدم هذا الكود

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Reflection;namespace Examples{    class Parent    {               public  string ClassName        {          get { return this.GetType().Name; }        }       }    class ChildA : Parent    {             }    class ChildB : Parent    {    }    class Program    {        static void Main(string[] args)        {       var objB = new ChildB();        Console.WriteLine(objB.ClassName);     var objA=new ChildA();            Console.WriteLine(objA.ClassName);            Console.ReadLine();           }               }    }

لاحظ انه باستدعاء Static method  لمعرفة جميع الابناء بدون instance.....

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Reflection;namespace ConsoleApplication1{    class Parent    {         public static IEnumerable<Type> GatName()    {       return Assembly.GetAssembly(typeof(Parent)).GetTypes().Where(t => t.IsSubclassOf(typeof(Parent)));           }                }    class ChildA : Parent    {             }    class ChildB : Parent    {    }    class Program    {        static void Main(string[] args)        {            foreach (Type t in ChildA.GatName())  Console.WriteLine(t.FullName);            Console.ReadLine();           }               }    }
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .