29-06-16, 03:50 AM
(آخر تعديل لهذه المشاركة : 29-06-16, 04:34 AM {2} بواسطة الشاكي لله.)
^
يامحاسن الصدف ...
انا ايضا تعاملت مع الPlugin بالـ Reflector
ولكن ليس باستعمال الـ Interface بل باستعمال الـ Abstract class (اخت الـ Interface بالرضاعة
)
والسبب في ذلك ان الInterface لاتدعم كتابة المتغيرات بداخلها ، وهذا سبب لي مشكلة
مثلا كنت اريد اضافة متغير Name بهذا الشكل
الا اننا نعرف ان الكود اعلاه بيسبب مشكلة ، لان الInterface لاتدعم ذلك
وحتى لو قمت بتحويل Name الى Property سيبب ذلك مشكلة وهو انني سأضطر الى اعادة تعريف للخاصية في الكلاس الجديد (بالعربي ، مااستفدت شيئ
)
بالاضافة الى ذلك ، لو طبقنا العلاقتين المذكورتين بالموضوع ، سنجد ان علاقة Is- a هي التي تصلح لموضوع الPlugin
لو عرفت Plugin باسم MyPlugin فيجب ان تستورث من Class لان العلاقة ستصبح >>>
MyPlugin Is a Plugin
MyPlugin can Plugin(لغويا غير ممكنة ، لذلك العلاقة لاتصلح)
اذن العلاقة هي Is- A فيجب الاشتقاق من Class .. ولكن المشكلة بالـ classes العادية ان اكوادها ثابتة ولاتناسب موضوع الPlugin لاننا نحتاج الى Type يمكننا من عمل Re-Implemented لاستعماله كقالب للcasting او لاستعماله في Plugin اخرى ..
ولكن -لحسن الحظ- Abstract class هو المنقذ
[/b]
يامحاسن الصدف ...
انا ايضا تعاملت مع الPlugin بالـ Reflector
ولكن ليس باستعمال الـ Interface بل باستعمال الـ Abstract class (اخت الـ Interface بالرضاعة
)والسبب في ذلك ان الInterface لاتدعم كتابة المتغيرات بداخلها ، وهذا سبب لي مشكلة
مثلا كنت اريد اضافة متغير Name بهذا الشكل
PHP كود :
interface IPlugin
{
public string Name
}
الا اننا نعرف ان الكود اعلاه بيسبب مشكلة ، لان الInterface لاتدعم ذلك
وحتى لو قمت بتحويل Name الى Property سيبب ذلك مشكلة وهو انني سأضطر الى اعادة تعريف للخاصية في الكلاس الجديد (بالعربي ، مااستفدت شيئ
)بالاضافة الى ذلك ، لو طبقنا العلاقتين المذكورتين بالموضوع ، سنجد ان علاقة Is- a هي التي تصلح لموضوع الPlugin
لو عرفت Plugin باسم MyPlugin فيجب ان تستورث من Class لان العلاقة ستصبح >>>
MyPlugin Is a Plugin

MyPlugin can Plugin(لغويا غير ممكنة ، لذلك العلاقة لاتصلح)
اذن العلاقة هي Is- A فيجب الاشتقاق من Class .. ولكن المشكلة بالـ classes العادية ان اكوادها ثابتة ولاتناسب موضوع الPlugin لاننا نحتاج الى Type يمكننا من عمل Re-Implemented لاستعماله كقالب للcasting او لاستعماله في Plugin اخرى ..
ولكن -لحسن الحظ- Abstract class هو المنقذ
[/b]PHP كود :
abstract class PluginBase
{
public string Name { get; set; }
public string Author { get; set; }
public abstract void Load();
}
//plugins
public class MyPlugin : PluginBase
{
public MyPlugin()
{
this.Name = "Sound Plugin v1.0";
this.Author = "Vb4arb";
}
public override void Load()
{
//my staff
}
}
public class BrotherPlugin : PluginBase
{
public BrotherPlugin()
{
this.Name = "Video Plugin v1.0";
this.Author = "google";
}
public override void Load()
{
//brother staff
}
}

