有人可以澄清代码的含义:
public abstract class BaseJobProcessor<T> : JobProcessor where T : BaseQueueMessage {}
非常感谢你。
答案 0 :(得分:3)
public abstract class BaseJobProcessor<T> : JobProcessor where T : BaseQueueMessage {}
它是一个抽象泛型类的定义,它有一个类型参数T
,其类型为BaseQueueMessage
。它将导致编译时错误,尝试创建派生自BaseJobProcessor
的泛型类的任何实例,并向其传递一个类型参数,该类型参数不是从BaseQueueMessage
派生的。
这通常是这样做的,因此您可以在BaseJobProcessor类的代码中对T
做出一些假设,在此示例中,它允许在所有实例上使用BaseQueueMessage
上定义的所有公共方法和属性在T
内创建/访问的BaseJobProcessor<T>.
类型(如果您没有约束,则只能在{{1}类型的任何实例上使用object
方法/属性}})
答案 1 :(得分:2)
这意味着任何填充T
位置的类型必须是BaseQueueMessage
本身,或者是从它派生的类。
所以你可以说
public class MyQueueMessage : BaseQueueMessage { ... }
public class MyJobProcessor<T> : BaseJobProcessor<T> where T : BaseQueueMessage { ... }
MyJobProcessor<MyQueueMessage> jobProcessor = ...
但你不能说
MyJobProcessor<string> jobProcessor =
因为string
不是来自BaseQueueMessage