如果在编译时已知,则有条件地实现c#接口吗?

时间:2019-04-13 19:29:17

标签: c#

一个简单的问题:C#/ Visual Studio是否可以告诉编译器:“如果(在编译时)知道什么是“ foo.IRenderable”,则将“ foo.IRenderable”添加到此类的接口列表中否则,就算我说了有关foo.IRenderable的事情(也可能会从类的源代码中排除以后标记的一个或多个方法,因为没有东西会调用它们)”

为什么:

我正在编写Unity3D的编辑器扩展,它将场景层次结构中的对象转储为XML(主要是为了简化生成项目文档的目的,而不是持久化或传递对象)。

我想为我的扩展定义一个接口,使用它的人可以选择在自己的类中实现并提供自定义渲染器...以一种不会强迫他们使我自己的扩展成为...的依赖的方式之后他们的课。

换句话说,如果他们的类在包含我的库的项目中,Visual Studio将知道“ foo.IRenderable”是什么,请注意,THEIR类具有类似的方法

public String renderThis(XmlElement parent) { ... }

并将该类编译为正式实现foo.IRenderable的类,以便以后将其实例传递给MY库时,可以执行以下操作:

if (theirObject is foo.IRenderable) {
    addElement((foo.IRenderable)theirObject)
else
    addElement(theirObject.ToString());
}

...并使它认识到他们的对象是可渲染的,并将其强制转换。

但是,如果某天他们的类最终出现在一个不包含我的库的项目中,并且Visual Studio在编译时不知道foo.IRenderable是什么,它将照常进行编译而不会引发错误。 ,并且如果我的课程有一天结束了对它的测试,它将使“ is foo.IRenderable”测试失败(因为在编译时未将其标记为foo.IRenderable)。

0 个答案:

没有答案