سؤال

ولقد جئت من C خلفية ++ أين يمكنني استخدام mixins قالب لكتابة التعليمات البرمجية التي تشير إلى FinalClass وهي معلمة قالب الذي تم تمريره في. هذا يسمح وظائف قابلة لإعادة الاستخدام ليكون "في مختلطة" إلى أي فئة مشتقة، ببساطة عن طريق وراثة من ReusableMixin مع المعلمتين قالب MyFinalClass. كل هذا يحصل inlined إلى الفئة بحيث انها كما لو أنني كتبت للتو من الدرجة الكبيرة التي فعلت كل شيء - أي سريع جدا! منذ يمكن mixins سلسلة، ويمكنني أن مزج في جميع أنواع السلوك (والدولة) في كائن واحد.

إذا كان أي شخص يريد توضيحا بشأن هذه التقنية، يرجى أن تطلب. سؤالي هو: كيف يمكنني الحصول على إعادة استخدام هذا القبيل في C #؟ ملاحظة: C # الأدوية لا تسمح يرث من معلمة العامة

هل كانت مفيدة؟

المحلول

في C #، الأقرب لتحصل على mixins النمط C ++ وإضافة mixins كحقول من فئة وإضافة مجموعة من طرق الشحن إلى الفئة:

public class MyClass
{
    private readonly Mixin1 mixin1 = new Mixin1();
    private readonly Mixin2 mixin2 = new Mixin2();

    public int Property1
    {
        get { return this.mixin1.Property1; }
        set { this.mixin1.Property1 = value; }
    }

    public void Do1()
    {
        this.mixin2.Do2();
    }
}

وهذا هو عادة بما فيه الكفاية، إذا كنت ترغب فقط لاستيراد وظائف وحالة mixins. A mixin يمكن بالطبع أن تنفذ ما تشاء، مع استكمال حقول (خاصة)، خصائص وأساليب، وما إلى ذلك.

إذا صفك يحتاج أيضا للتعبير عن "هو واحد في" العلاقات مع mixins فأنت بحاجة للقيام بما يلي:

interface IMixin1
{
    int Property1 { get; set; }
}

interface IMixin2
{
    void Do2();
}

class MyClass : IMixin1, IMixin2
{
    // implementation same as before
}

(وهذا أيضا هو طريقة قياسية ويحتذى كيف متعددة الميراث في C #).

وبطبيعة الحال، فإن واجهات mixin وكذلك الطبقات mixin يمكن أن يكون الوراثة، على سبيل المثال، مع المعلمة الطبقة الأكثر مشتقة أو أيا كان.

نصائح أخرى

هل يمكن استخدام واجهات وأساليب الإرشاد. على سبيل المثال:

public interface MDoSomething // Where M is akin to I
{
     // Don't really need any implementation
}

public static class MDoSomethingImplementation
{
     public static string DoSomething(this MDoSomething @this, string bar) { /* TODO */ }
}

والآن يمكنك استخدام mixins من وراثة من MDoSomething. تذكر، وذلك باستخدام أساليب الإرشاد داخل (هذا) فئة تتطلب هذه التصفيات. على سبيل المثال:

public class MixedIn : MDoSomething
{
    public string DoSomethingGreat(string greatness)
    {
         // NB: this is used here.
         return this.DoSomething(greatness) + " is great.";
    }
}

public class Program
{
    public static void Main()
    {
        MixedIn m = new MixedIn();
        Console.WriteLine(m.DoSomething("SO"));
        Console.WriteLine(m.DoSomethingGreat("SO"));
        Console.ReadLine();
    }
}

وHTH.

في C #، ويمكن استخدام لك "جزئية" الكلمة للإشارة إلى أن يتم تنفيذ صفك في ملفات متعددة المصدر. ثم يمكنك استخدام أداة النموذجيه صغيرة لصناعة السيارات في توليد ملفات التعليمات البرمجية المصدر إضافية التي تحتوي على الأساليب التي تريد حقن في صفك.

وأداة النموذجيه T4 شملت في Visual Studio يمكن استخدامها للقيام بذلك، ولكن اتباع نهج أكثر التبسيط يمكن استخدامها. انظر بلدي النموذجيه المحرك: http://myxin.codeplex.com/

وتحقق من مكتبة ريمكس لصافي على http://remix.codeplex.com

وهذه المكتبة يجلب mixins ل. NET

وطرق الإرشاد من شأنه أن يساعد في السيناريو الخاص بك؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top