我一直在阅读Albaharis的"C#5.0 in A Nutshell",我在Generics部分遇到过这个问题,据说这是合法的:
class Bar<T> where T : Bar<T> { ... }
Run Code Online (Sandbox Code Playgroud)
尽管我仔细阅读了整章,但这对我来说毫无意义.我甚至无法理解它.
有人可以用一些可以理解的命名来解释它,例如:
class Person<T> where T : Person<T> { ... }
Run Code Online (Sandbox Code Playgroud)
还有一个真实的应用场景,这种用法是否合适且有用?
我有一个表 A,它有以下列:
AId - TargetId - IsActive
对应于这个表,我有以下类(带有额外的计算属性)和映射器:
public class A
{
public virtual long AId { get; set; }
public virtual int TargetId { get; set; }
public virtual int IsActive { get; set; }
//calculated property, doesn't exist in the table
public virtual bool IsClientSide
{
get { return ((this.TargetId & TargetEnum.ClientSide) != 0); }
}
}
Run Code Online (Sandbox Code Playgroud)
using NHibernate.Mapping.ByCode;
using NHibernate.Mapping.ByCode.Conformist;
using NHibernate.Type;
using ANamespace.A;
namespace mapping
{
public class AMap : ClassMapping<A>
{
public AMap()
{
this.Cache(x …Run Code Online (Sandbox Code Playgroud)