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

dev*_*os1 3 .net c# uwp

我有一种情况,我需要一个变量是某种类型,但它实现了一个特定的自定义接口.具体来说,我想要要求对象是a FrameworkElement,但它还实现了一个自定义接口,调用它IExample.

有什么方法可以通过声明IExample或实际变量来做到这一点?我正在设想这样的东西(伪语法):

public FrameworkElement<IExample> ChildView { get; set; }
Run Code Online (Sandbox Code Playgroud)

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

public interface IExample : FrameworkElement
Run Code Online (Sandbox Code Playgroud)

这些都可以在C#中使用吗?有没有可以完成同样事情的替代方案?基本上我只想要要求实例属于FrameworkElement也实现的子类IExample.

Igo*_*gor 6

您可以在类级别使用泛型约束,然后将其应用于属性,因为属性本​​身无法直接定义约束.

public class SomeClass<T> where T : FrameworkElement, IExample {
  public T ChildView { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

或者在界面上

public interface ISomeInterface<T> where T : FrameworkElement, IExample {
  T ChildView { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

或者在方法级别,如果您希望将类型作为符合类型FrameworkElement和实现的参数IExample

public void SomeMethod<T>(T someParameter) where T : FrameworkElement, IExample 
{ /*do something with instance someParameter*/)
Run Code Online (Sandbox Code Playgroud)