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

本文关键字:定义 约束 变量 接口 | 更新日期: 2023-09-27 18:17:05

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

是否有任何方法可以从IExample的声明或实际变量中做到这一点?我设想这样的东西(伪语法):

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

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

public interface IExample : FrameworkElement

这些在c#中都是可能的吗?是否有替代方案可以完成同样的事情?基本上,我只是想要求实例是FrameworkElement的子类,也实现了IExample

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

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

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