通用接口的类型是否可能基于特定的父类?
例如:
public interface IGenericFace<T : BaseClass>
{
}
Run Code Online (Sandbox Code Playgroud)
显然上面的代码不起作用,但如果确实如此,我试图告诉编译器的是T
必须是一个子类BaseClass
.可以这样做,有计划吗,等等?
我认为它在特定项目方面很有用,确保通用接口/类在编译时不与非预期类型一起使用.或者也可以自我文档:显示预期的类型.
Rya*_*ndy 87
public interface IGenericFace<T> where T : SomeBaseClass
Run Code Online (Sandbox Code Playgroud)
Mic*_*cah 64
你所指的是"通用约束".可以在泛型类型上存在许多约束.
一些基本的例子如下:
where T: struct
- type参数必须是值类型.除了Nullable
- 之外的任何值类型都可以指定.有关更多信息,请参阅使用可空类型(C#编程指南).
where T : class
- type参数必须是引用类型; 这也适用于任何类,接口,委托或数组类型.
where T : new()
- 类型参数必须具有公共无参数构造函数.与其他约束一起使用时,new()
必须最后指定约束.
where T : <base class name>
- type参数必须是或从指定的基类派生.
where T : <interface name>
- type参数必须是或实现指定的接口.可以指定多个接口约束.约束接口也可以是通用的.
where T : U
- 提供的类型参数T
必须是或从提供的参数派生U
.这称为裸型约束.
这些也可以像这样链接在一起:
C#
public class TestClass<T> where T : MyBaseClass, INotifyPropertyChanged, new() { }
public interface IGenericFace<T> where T : SomeBaseClass
Run Code Online (Sandbox Code Playgroud)
VB
Public Class TestClass(Of T As {MyBaseClass, INotifyPropertyChanged, New})
Public Interface IGenericInterface(Of T As SomeBaseClass)
Run Code Online (Sandbox Code Playgroud)
小智 6
是.
public interface IGenericFace<T>
where T : BaseClass
{
}
Run Code Online (Sandbox Code Playgroud)