2013-01-13 63 views
0

对于我个人的熏陶 - 有什么办法可以做到吗?我正在实现一个Imageable类,该类提供了将WPF对象输出到矢量图形的ToWmf()函数。但是这仅适用于WPF Visual类型,因此成像操作的其中一个组件需要参数类型为Visual,我打算将其设为this有没有办法限制哪些类型被允许继承我的C#类?

我发现了C#参数约束的各种示例,但没有约束继承类类型的示例。目前我正在使用静态ImagingUtil.ToWmf()类,但是这只是一个平坦的无答案或有另一种方式吗?

+1

我不认为这是有道理的;基类的目的是在一堆相关的类上强制执行一个通用接口。 –

+0

为什么会/应该有人想要这种行为? – Beachwalker

+1

你所要求的没有意义。 –

回答

2

问题意味着Imageable对象也将在同一时间一个Visual(否则你怎么传递this的东西,需要一个Visual?)。

这是不可能的,除非这两种类型的从另一个继承,而且由于Visual是不是你的控制之下则Imageable必须是Visual后裔。在这种情况下,根本没有问题。

在所有的可能性,你想要做的是一个定义IImageable接口,然后实现它看起来像这样的扩展方法是什么:

public static void ToWmf<T>(this T imageable) where T : Visual, IImageable 
{ 
    // .... 
} 

这样任何(也是唯一一个)用户定义的类导出从Visual和同时实现IImageable可以通过ToWmf处理。

+0

呵呵。我在一个不同的答案中提到,我需要的是一种扩展方法,但这将是一个有趣的变化,并直接回答我的问题。谢谢你,先生 –

0

您可以对泛型使用约束。请参阅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作为参数。

+0

这是泛型,而不是继承... –

+0

...是的,但你可以从泛型类/接口继承。 – Beachwalker

+0

这就是我的意思是在我的问题中关于参数约束的评论。谢谢,不过。 –

相关问题