对于我个人的熏陶 - 有什么办法可以做到吗?我正在实现一个Imageable
类,该类提供了将WPF对象输出到矢量图形的ToWmf()
函数。但是这仅适用于WPF Visual
类型,因此成像操作的其中一个组件需要参数类型为Visual
,我打算将其设为this
。有没有办法限制哪些类型被允许继承我的C#类?
我发现了C#参数约束的各种示例,但没有约束继承类类型的示例。目前我正在使用静态ImagingUtil.ToWmf()
类,但是这只是一个平坦的无答案或有另一种方式吗?
对于我个人的熏陶 - 有什么办法可以做到吗?我正在实现一个Imageable
类,该类提供了将WPF对象输出到矢量图形的ToWmf()
函数。但是这仅适用于WPF Visual
类型,因此成像操作的其中一个组件需要参数类型为Visual
,我打算将其设为this
。有没有办法限制哪些类型被允许继承我的C#类?
我发现了C#参数约束的各种示例,但没有约束继承类类型的示例。目前我正在使用静态ImagingUtil.ToWmf()
类,但是这只是一个平坦的无答案或有另一种方式吗?
问题意味着Imageable
对象也将在同一时间一个Visual
(否则你怎么传递this
的东西,需要一个Visual
?)。
这是不可能的,除非这两种类型的从另一个继承,而且由于Visual
是不是你的控制之下则Imageable
必须是Visual
后裔。在这种情况下,根本没有问题。
在所有的可能性,你想要做的是一个定义IImageable
接口,然后实现它看起来像这样的扩展方法是什么:
public static void ToWmf<T>(this T imageable) where T : Visual, IImageable
{
// ....
}
这样任何(也是唯一一个)用户定义的类导出从Visual
和同时实现IImageable
可以通过ToWmf
处理。
呵呵。我在一个不同的答案中提到,我需要的是一种扩展方法,但这将是一个有趣的变化,并直接回答我的问题。谢谢你,先生 –
您可以对泛型使用约束。请参阅MSDN article以了解更多信息。
public interface IImageable<T> where T : Visual
{
MyReturnType ToWmf();
}
public class MyImageable : IImageable<XXX> // does not work if XXX is not a Visual/inherited from Visual
{
//implements MyReturnType ToWmf();
}
然后只需注入IImageable作为参数。
我不认为这是有道理的;基类的目的是在一堆相关的类上强制执行一个通用接口。 –
为什么会/应该有人想要这种行为? – Beachwalker
你所要求的没有意义。 –