0

为了我个人的熏陶——有什么办法吗?我正在实现一个Imageable类,该类提供一个ToWmf()将 WPF 对象输出到矢量图形的函数。但这仅对 WPF 类型有意义Visual,因此成像操作的组件之一需要一个带有 type 的参数Visual,我打算将其设置为this

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

4

2 回答 2

2

这个问题意味着Imageable对象也将同时是 a Visual(否则你将如何传递this给需要 a 的东西Visual?)。

这是不可能的,除非这两种类型中的一种继承自另一种,并且由于Visual不受您的控制,因此Imageable必须是Visual. 在这种情况下,完全没有问题。

您很可能想要做的是定义一个IImageable接口,然后实现一个扩展方法,如下所示:

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

这样,任何(并且只有一个)用户定义的类派生自Visual并同时实现IImageable都可以由ToWmf.

于 2013-01-13T00:20:39.243 回答
0

您可以对泛型使用约束。有关详细信息,请参阅此处的MSDN 文章。

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 作为参数。

于 2013-01-13T00:13:07.033 回答