为了我个人的熏陶——有什么办法吗?我正在实现一个Imageable
类,该类提供一个ToWmf()
将 WPF 对象输出到矢量图形的函数。但这仅对 WPF 类型有意义Visual
,因此成像操作的组件之一需要一个带有 type 的参数Visual
,我打算将其设置为this
。
我找到了各种 C# 参数约束的示例,但没有找到约束继承类类型的示例。目前我正在使用一个静态ImagingUtil.ToWmf()
类,但这只是一个完全没有答案还是有其他方法?
为了我个人的熏陶——有什么办法吗?我正在实现一个Imageable
类,该类提供一个ToWmf()
将 WPF 对象输出到矢量图形的函数。但这仅对 WPF 类型有意义Visual
,因此成像操作的组件之一需要一个带有 type 的参数Visual
,我打算将其设置为this
。
我找到了各种 C# 参数约束的示例,但没有找到约束继承类类型的示例。目前我正在使用一个静态ImagingUtil.ToWmf()
类,但这只是一个完全没有答案还是有其他方法?
这个问题意味着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
.
您可以对泛型使用约束。有关详细信息,请参阅此处的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 作为参数。