有没有办法约束允许哪些类型继承我的C#类?

时间:2013-01-13 00:08:59

标签: c# wpf inheritance

对于我自己的个人启发 - 有没有办法做到这一点?我实现了一个Imageable类,它提供了一个ToWmf()函数,可以将WPF对象输出到矢量图形。但这只对WPF Visual类型有意义,因此成像操作的一个组件需要一个类型为Visual的参数,我打算将其作为this

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

2 个答案:

答案 0 :(得分:2)

问题意味着Imageable对象同时也是Visual(否则您将如何将this传递给需要Visual的内容?)。

除非两种类型中的一种继承自另一种类型,否则这是不可能的,并且由于Visual不在您的控制之下,因此Imageable必须是Visual的后代。在这种情况下,根本没有问题。

您希望做的最有可能是定义IImageable接口,然后实现如下所示的扩展方法:

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

这样,Visual可以处理从IImageable派生并同时实现ToWmf的任何(也是唯一的)用户定义的类。

答案 1 :(得分: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作为参数。