请注意类型参数澄清的限制

时间:2011-08-28 04:11:10

标签: c#

有人可以澄清代码的含义:

public abstract class BaseJobProcessor<T> : JobProcessor where T : BaseQueueMessage  {}

非常感谢你。

2 个答案:

答案 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