对不起,标题不好,但我不知道如何用好方法来称呼它。
设置以下接口:
interface IFoo
{
}
interface IBar
{
}
以及以下类别:
class Base
{
}
class Derived1 : Base, IFoo, IBar
{
}
class Derived2 : Base, IFoo, IBar
{
}
我需要为Derived1
和Derived2
建立一个通用类型,并具有Base
,IFoo
和IBar
的所有功能。这样我就可以将Derived1
和Derived2
的实例放入同一个集合中,而无需执行某些操作就可以访问Base
,IFoo
和IBar
的功能反射黑魔法。
如果Base
是一个接口,那么我只需要创建一个需要实现Base
,IFoo
和IBar
的接口,但这不是事实。
我也不想在Derived1
/ Derived2
和Base
之间拥有中间继承:
class Intermediate : Base, IFoo, IBar
{
}
class Derived1 : Intermediate
{
}
class Derived2 : Intermediate
{
}
因为我处在Unity的上下文中,所以在任何地方都应该避免继承。
我也无法修改Base
。
我考虑过拥有一个IBase
接口,该接口需要Base
的所有功能,并且拥有一个“中间”接口也需要实现它,即:
interface IIntermediate : IBase, IFoo, IBar
{
}
class Derived1 : Base, IIntermediate
{
}
class Derived2 : Base, IIntermediate
{
}
但是我必须将Base
(及其父代)的所有功能复制到IBase
中,并且IBase
也不会是Base
。这样看起来有点脏,可能会导致我看不到的问题。
除了上面提到的两种可能性之外,我还有其他方法可以实现我需要做的事情?谢谢!
答案 0 :(得分:1)
带有隐式运算符的类如何能够构造并返回所有所需的类型呢?
class MyBase : IFoo, IBar
{
Base innerValue;
public static implicit operator Base(MyBase value)
{
return value.innerValue;
}
public static implicit operator MyBase(Derived1 value)
{
return new MyBase(value);
}
public static implicit operator MyBase(Derived2 value)
{
return new MyBase(value);
}
public MyBase(Derived1 value)
{
innerValue = value;
}
public MyBase(Derived2 value)
{
innerValue = value;
}
// Implement IFoo and IBar based on innerValue calls
}
这将允许您创建如下数组:
MyBase[] myArray = new MyBase[] {new Derived1(), new Derived2()};
并且您仍然可以将每个实例视为基础:
Base B1 = myArray[0];