C# では、C++ スタイルの mixin に最も近いのは、mixin をクラスのフィールドとして追加し、一連の転送メソッドをクラスに追加することです。
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();
}
}
ミックスインの機能と状態のみをインポートする場合は、通常これで十分です。mixin はもちろん、(プライベート) フィールド、プロパティ、メソッドなどを完備して、好きなように実装できます。
クラスがミックスインとの「is-a」関係も表現する必要がある場合は、次のことを行う必要があります。
interface IMixin1
{
int Property1 { get; set; }
}
interface IMixin2
{
void Do2();
}
class MyClass : IMixin1, IMixin2
{
// implementation same as before
}
(これは、C# で多重継承をエミュレートする標準的な方法でもあります。)
もちろん、ミックスイン インターフェイスとミックスイン クラスはジェネリックにすることができます。たとえば、最も派生したクラス パラメータなどを使用できます。