我有一种情况,我需要要求变量属于某种类型,但它也实现特定的自定义接口。具体来说,我想要求对象为FrameworkElement
,但它也实现了自定义界面,称之为IExample
。
我可以通过IExample
的声明或实际变量来做到这一点吗?我想象的是这样的(伪语法):
public FrameworkElement<IExample> ChildView { get; set; }
或者我想将它声明为接口本身的约束:
public interface IExample : FrameworkElement
C#中是否有可能出现这些问题?有没有可以完成同样事情的替代方案?基本上我只想要求实例属于FrameworkElement
的子类,它也实现了IExample
。
答案 0 :(得分:6)
您可以在类级别使用泛型约束,然后将其应用于属性,因为属性本身无法直接定义约束。
public class SomeClass<T> where T : FrameworkElement, IExample {
public T ChildView { get; set; }
}
或在界面上
public interface ISomeInterface<T> where T : FrameworkElement, IExample {
T ChildView { get; set; }
}
或者在方法级别,如果您希望将类型作为符合FrameworkElement
类型且同时实现IExample
public void SomeMethod<T>(T someParameter) where T : FrameworkElement, IExample
{ /*do something with instance someParameter*/)