是否有一种方法来约束什么类型被允许继承我的c#类



对于我个人的启发——有什么方法可以做到这一点吗?我正在实现一个Imageable类,它提供一个ToWmf()函数,该函数将WPF对象输出到矢量图形。但这只对WPF Visual类型有意义,因此成像操作的一个组成部分需要Visual类型的参数,我打算将其设置为this

我已经找到了c#参数约束的各种例子,但没有约束继承类类型的例子。目前我正在使用一个静态ImagingUtil.ToWmf()类,但这只是一个平面没有答案或有另一种方式?

这个问题意味着Imageable对象同时也是Visual对象(否则你怎么把this传递给需要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();
}

最新更新