可能有人请澄清代码的含义:制约类型参数的说明,请
public abstract class BaseJobProcessor<T> : JobProcessor where T : BaseQueueMessage {}
谢谢v多。
可能有人请澄清代码的含义:制约类型参数的说明,请
public abstract class BaseJobProcessor<T> : JobProcessor where T : BaseQueueMessage {}
谢谢v多。
这意味着,填充任何类型的T
位置必须是BaseQueueMessage
本身,或从它派生的类。
因此可以这样说
public class MyQueueMessage : BaseQueueMessage { ... }
public class MyJobProcessor<T> : BaseJobProcessor<T> where T : BaseQueueMessage { ... }
MyJobProcessor<MyQueueMessage> jobProcessor = ...
但你不能说
MyJobProcessor<string> jobProcessor =
因为string
不会从BaseQueueMessage
public abstract class BaseJobProcessor<T> : JobProcessor where T : BaseQueueMessage {}
它有一个类型参数T
这是BaseQueueMessage
类型的抽象泛型类的定义。它会导致编译时错误,尝试创建从BaseJobProcessor
派生的泛型类的任何实例,并将其传递一个非BaseQueueMessage
派生类型的类型参数。
这通常是这样做的,你可以在BaseJobProcessor类的代码中做一些假设为T
,在这个例子中,将允许使用在所创建的T
类型的所有实例上BaseQueueMessage
定义的所有公共方法和属性/内BaseJobProcessor<T>.
访问(如果你没有足够的约束,你只能够在T
类型的任何实例中使用object
方法/属性)
感谢所有派生的,所有有效的答案@ siride的例子帮我更好地支持 –
@flybyte:但请注意BrokenGlass的第二段,这解释了约束有用的另一个原因。 – siride