2016-04-23 20 views
4

我看到的语法如下:这个比较器C#语法是如何工作的?

var comparer = Comparer<TItem>.Default; 

如何做到这一点的语法工作?

我会认为Comparer将不得不new'd了

+0

你在说什么语法?你的意思是泛型? –

+0

@shiva相关 - http://stackoverflow.com/questions/3037203/are-static-members-of-a-generic-class-tied-to-the-specific-instance –

回答

1

不必明确新增比较器的技巧是Default是一个属性,并且属性允许有代码。这也适用于静态属性:

static Comparer<T> Default { 
    get { 
     ... 
     return new ClassExtendingComparer<T>(); 
    } 
} 

这相当于使用字段/属性语法访问的无参数工厂方法。

5

Default是一个静态属性,因为这样可以访问,而无需的Comparer<T>一个实例。

无法通过实例引用静态成员。相反,它是通过类型名称引用的。

Comparer<TItem>是这里的一个类型名称。

+0

所以它是一个通用的访问器属性,它调用一个引擎盖下的方法,而不是一个静态数据字段。这意味着该属性可以动态使用指定的类型来查找默认比较器? – shiva

+0

它是一个属性,而不是字段,所以是的,它可以执行代码。 – MarcinJuraszek