qin*_*126 4 c# generics nhibernate generic-constraints
我正在学习Nhibernate 3.0.在其中一个示例代码示例中,它创建了一个抽象基类实体类:
public abstract class Entity<T> where T : Entity<T>
Run Code Online (Sandbox Code Playgroud)
然后,使Customer实体继承自基Entity类:
public class Customer : Entity<Customer>
Run Code Online (Sandbox Code Playgroud)
我知道这是一个抽象的通用类,它是使用where关键词,以确保类型T是 Entity<T>,这是我感到困惑.
Customer继承自" Entity<Customer>",这个" Entity<Customer>"取" Customer" T,但这Customer不是" Entity<T>".
请帮助我理解这一点,我真的很困惑这个泛型类.
你说
客户继承自"实体",此"实体"将"客户"视为T,但此客户不是"实体"
这没有任何意义,因为继承意味着什么.它建立了"是一种"关系.所以实际上Customer是一个Entity
抱歉,这是基于代码被剥离的泛型,因为它不在代码块中.
同样的原则仍然有效.它只是有点混乱,因为它看起来像是递归定义,但事实并非如此.
把它想象成Customer继承而来Entity 恰好是依赖于泛型参数本身的方法或领域,例如Customer.我不熟悉NHibernate所以我不知道其余的是什么Entity<T>,但我想它有一些方法使用它自己的类型作为泛型参数.
比方说它有一个叫做的方法
public IEnumerable<T> GetEntities()
Run Code Online (Sandbox Code Playgroud)
返回了它自己的实例列表.它需要该方法来返回具体类型而不是基类型.所以在Customer课堂上,那个方法就是
public IEnumerable<Customer> GetEntities<Customer>()
Run Code Online (Sandbox Code Playgroud)
如果它没有泛型参数,则只能返回 IEnumerable<Entity>
这只是它如何使用的一个例子,我不知道它是如何使用的.
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |