一般而言,如果您打算在Remoting/WCF上下文中使用它,只需要创建一个MarshalByRef对象。这通常是一个足够特殊的情况,它不是一个痛苦。
假设你有一个普通的类型,并且你想从它派生出来并专门化它,然后远程派生类型 - 现在你有一个问题,因为要远程对象必须从MarshalByRefObject继承,而你的原始普通类类型没有。假设你不能改变它,因为你正在做二进制继承,或者因为它本身是从你不能改变的基类派生的?正如提问者指出的那样,由于C#(和.NET一般)不允许MI,所以不能从两者继承。
简短的回答是,你是有点拧。您可以将常规类型从MarshalByRefObject更改为inhert(或者可以将其插入足够长的链中,以便将其插入某个有效的地方),否则您可以考虑使用代理对象。
例如,您可以创建一个描述类型接口的接口契约,然后构建一个继承自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();
}
}
虽然似乎很多工作。最终如果你在这种情况下,我会建议重新设计或重新思考。
我想你可能需要提供实际的问题是在这里还有什么背景...... – 2008-11-24 01:49:59
+1什么格雷格说 – JaredPar 2008-11-24 01:52:04
我怀疑你-3票是为(现在编辑)妙语关于“多重继承截肢语言“。并非所有人都认同多重继承是一个好主意。 – 2008-11-24 02:10:17