一般に、オブジェクトを Remoting / WCF コンテキストで使用する場合にのみ MarshalByRef を作成する必要があります。これは通常、特別なケースであり、苦痛ではありません。
一般的な型があり、それから派生させて特殊化し、派生型をリモート化するとします。リモート化するには、オブジェクトが MarshalByRefObject から継承する必要があり、元の一般的な型が継承されていないため、問題が発生します。 . バイナリ継承を行っているため、または変更できない基本クラスから派生しているため、変更できないとしますか? 質問者が指摘するように、C# (および .NET 全般) では MI が許可されていないため、両方から継承することはできません。
簡単に言えば、あなたは一種のめちゃくちゃだということです。一般的な型を MarshalByRefObject から継承するように変更する (または、効果的な場所に挿入できるようにチェーンを十分に遡る) か、プロキシ オブジェクトをいじることを考えることができます。
たとえば、型のインターフェイスを記述するインターフェイス コントラクトを作成し、MarshalByRefObject から継承するプロキシ型を構築します。このプロキシ型は、合成と型のインスタンス (つまりラッパー) への委譲によってそのインターフェイスも実装します。次に、そのプロキシ型のインスタンスをリモートで作成して、型をインスタンス化し、期待どおりに動作させることができますが、メソッドからのすべての戻り型は [Serializable] である必要があります。
public interface IMyType
{
string SayHello();
string BaseTypeMethodIWantToUse();
}
public class MyType : MyBaseType, IMyType
{
public string SayHello()
{
return "Hello!";
}
}
public class MyRemoteableType : MarshalByRefObject, IMyType
{
private MyType _instance = new MyType();
public string SayHello()
{
return _instance.SayHello();
}
public string BaseTypeMethodIWantToUse()
{
return _instance.BaseTypeMethodIWantToUse();
}
}
しかし、多くの仕事のように見えます。最終的に、このシナリオにいる場合は、再設計または再考することをお勧めします.