我来自一个C++的背景,我可以使用模板的混合编写代码,指FinalClass这是一个模板参数,是通过。这使得可重复使用的职能"混合的"任何源类,通过简单地继承自ReusableMixin用一个模板放慢参数的MyFinalClass.这个得到所有内嵌入类的所以这是因为虽然我写了一大类做的一切--即非常快!因为混入可以链接,我可以混合使用在各种各样的行为(和国家)进入一个对象。

如果有人想澄清的技术,请求。我的问题是,如何可以获得重复使用等,在C#?注:C#仿制药不允许继承一个通用的参数。

有帮助吗?

解决方案

在C#最近的你得到C++style混入增加的混合作领域的一类,并添加一堆转移的方法的等级:

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();
    }
}

这通常是足够的,如果你只想要进口的功能和状态的混入.一个混合可以当然可以实现的,只要你喜欢,完成与(私人)领域、属性的方法,等等。

如果你的课也需要表达"是一个"关系与混合然后你需要做到以下几点:

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

interface IMixin2
{
    void Do2();
}

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

(这也是标准方法如何将多个继承是仿效。)

当然,混入接口以及混合班可能是仿制药,例如与大多数源类参数或者别的什么东西。

其他提示

你可以使用的接口,并扩展方法。例如:

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 */ }
}

现在你可以使用混入通过继承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();
    }
}

禾田.

在C#你可以使用的"部分"的关键词来表示这类是实现在多个来源的文件。然后你可以用一点点模板工具自动产生的额外来源码文件包含的方法要注射在你的类。

T4模板工具,包括在Visual Studio可以用来做到这一点,但一个更简单的方法可以使用。看到我自己的模板发动机: http://myxin.codeplex.com/

检查出的混音图书馆。网上 http://remix.codeplex.com

这个图书馆带来混入。净

将扩展的方法帮助您的情况?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top