对于我自己的个人启发 - 有没有办法做到这一点?我实现了一个Imageable
类,它提供了一个ToWmf()
函数,可以将WPF对象输出到矢量图形。但这只对WPF Visual
类型有意义,因此成像操作的一个组件需要一个类型为Visual
的参数,我打算将其作为this
。
我找到了C#参数约束的各种示例,但没有约束继承类类型的示例。目前我正在使用静态ImagingUtil.ToWmf()
课程,但这只是一个平坦的没有答案还是有另一种方式?
答案 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作为参数。