好的,下面是我想要做的事情。
基本上,总结以上例子,我有一个类型为T的通用包装器类型。 我希望该包装器类型将其所包含的任何内容(以及其自身的副本!)通知正在包含它的对象,前提是所包含的对象实现了特定接口(此部分我知道如何实现)。
但是情况变得棘手!为什么?因为容器的通用类型需要有一个类型。
还记得那个重要的行吗?
如果REPLACE_THIS是IContainableObject,则接口的所有实现者在其NotifyContained方法中必须使用IContainerObject,而不是它们实现的类的名称。
对于显而易见的原因,使用ImplementingType作为接口内容器的类型甚至更糟糕!
因此,我的问题是,我该怎么做才能使REPLACE_THIS表示实现接口的对象的类?
Class Container<T>
{
T contained;
public void ContainObject(T obj)
{
contained = obj;
if(/*Magical Code That Detects If T Implemtns IContainableObject*/)
{
IContainableObect c = (IContainableObject)obj;
c.NotifyContained(self);
}
}
}
interface IContainableObject
{
public void NotifyContained(Container<REPLACE_THIS>);//This line is important, see below after reading code.
}
Class ImplementingType : IContaiableObject
{
public Container<ImplementingType> MyContainer;
public void NotifyContained(Container<ImplmentingType> c)
{
MyContainer = c;
}
}
Class Main
{
public static void Main(args)
{
ImplementingType iObj = new ImplementingType();
Container<ImplementingType> container = new Container();
container.ContainObject(iObj);
//iObj.MyContainer should now be pointing to container.
}
}
基本上,总结以上例子,我有一个类型为T的通用包装器类型。 我希望该包装器类型将其所包含的任何内容(以及其自身的副本!)通知正在包含它的对象,前提是所包含的对象实现了特定接口(此部分我知道如何实现)。
但是情况变得棘手!为什么?因为容器的通用类型需要有一个类型。
还记得那个重要的行吗?
如果REPLACE_THIS是IContainableObject,则接口的所有实现者在其NotifyContained方法中必须使用IContainerObject,而不是它们实现的类的名称。
对于显而易见的原因,使用ImplementingType作为接口内容器的类型甚至更糟糕!
因此,我的问题是,我该怎么做才能使REPLACE_THIS表示实现接口的对象的类?