Im Allgemeinen möchten Sie nur ein Objekt MarshalByRef erstellen, wenn Sie es in einem Remoting/WCF-Kontext verwenden möchten. Dies ist normalerweise ein Spezialfall, dass es kein Schmerz ist.
Angenommen, Sie hatten einen allgemeinen Typ, und Sie wollten daraus ableiten und spezialisieren, und dann remote den abgeleiteten Typ - jetzt haben Sie ein Problem, weil remoted ein Objekt von MarshalByRefObject und Ihrem ursprünglichen General erben muss Typ nicht. Angenommen, Sie können es nicht ändern, weil Sie eine binäre Vererbung durchführen, oder weil es selbst von einer Basisklasse abgeleitet ist, die Sie nicht ändern können? Da der Fragesteller darauf hinweist, dass C# (und .NET im Allgemeinen) MI nicht zulässt, können Sie nicht von beiden erben.
Die kurze Antwort ist, dass Sie irgendwie geschraubt sind. Sie ändern entweder den allgemeinen Typ von MarshalByRefObject in inert (oder gehen weit genug die Kette hinauf, dass Sie es irgendwo effektiv einfügen können), oder Sie können darüber nachdenken, sich mit Proxy-Objekten herumzuärgern.
Sie könnten beispielsweise einen Schnittstellenvertrag erstellen, der die Schnittstelle Ihres Typs beschreibt, und dann einen von MarshalByRefObject erbenen Proxy-Typ erstellen, der diese Schnittstelle ebenfalls durch Komposition und Delegierung in eine Instanz Ihres Typs (dh einen Wrapper) implementiert. Sie könnten dann eine Instanz dieses Proxy-Typs remote schalten, der Ihren Typ instanziieren und die Arbeit wie erwartet ausführen würde - aber alle Rückgabetypen von Methoden müssen [Serializable] sein.
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();
}
}
Scheint wie eine Menge Arbeit, obwohl. Letztendlich, wenn Sie in diesem Szenario sind, würde ich ein Redesign oder ein Umdenken vorschlagen.
Ich denke, man könnte hier mehr Kontext zu wissen, was das eigentliche Problem ist, zur Verfügung stellen müssen ... –
+1 für das, was Greg sagte – JaredPar
ich vermuten, dass Ihr -3 Stimmen ist für etwa einen die (jetzt bearbeitet) witzeln " amputierte Sprache mit Mehrfachvererbung ". Nicht alle sind sich einig, dass Mehrfachvererbung eine gute Idee ist. –