c#中获取前缀背后的原因

时间:2018-05-15 13:14:09

标签: .net reflection syntax properties getter

考虑到在c#中我们有getter和setter属性的特定语法,为什么有些属性是用方法访问的(通常以' Get'为前缀)而不是getter?

例如为什么:

var properties = object
    .GetType()
    .GetProperties();

而不是像以下那样使用getter:

var properties = object
    .Type
    .Properties

2 个答案:

答案 0 :(得分:2)

GetProperties()答案很简单:它为每个调用返回一个新的属性数组(属性的内部数组的过滤(仅公开)副本),并从MSDN返回:

  

在以下情况下,请使用方法而不是属性。

     

该操作返回内部状态的副本(这不包括堆栈上返回的值类型对象的副本)。

  

该操作返回一个数组。

对于我不知道的GetType()

答案 1 :(得分:2)

Design Guidelines for Developing Class Libraries 有这样说:

  

如果成员表示该类型的逻辑属性,请考虑使用属性。

GetType()object上定义,Type是所有类型的基本类型。您不希望每个类型始终拥有String.prototype.hydrateAsDate = ()=>{ this = new Date(this); // what I want to do, but how do I do it ?! } 属性。

  

如果属性的值存储在进程内存中,并且属性只提供对值的访问,请使用属性而不是方法。

据我所知,需要进行一些翻译才能将CLR的内部元数据翻译成PropertyInfo对象。