在接口或变量上定义类约束

时间:2016-11-08 21:18:09

标签: c# .net uwp

我有一种情况,我需要要求变量属于某种类型,但它实现特定的自定义接口。具体来说,我想要求对象为FrameworkElement,但它也实现了自定义界面,称之为IExample

我可以通过IExample的声明或实际变量来做到这一点吗?我想象的是这样的(伪语法):

public FrameworkElement<IExample> ChildView { get; set; }

或者我想将它声明为接口本身的约束:

public interface IExample : FrameworkElement

C#中是否有可能出现这些问题?有没有可以完成同样事情的替代方案?基本上我只想要求实例属于FrameworkElement的子类,它也实现了IExample

1 个答案:

答案 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*/)