考虑到在c#中我们有getter和setter属性的特定语法,为什么有些属性是用方法访问的(通常以' Get'为前缀)而不是getter?
例如为什么:
var properties = object
.GetType()
.GetProperties();
而不是像以下那样使用getter:
var properties = object
.Type
.Properties
答案 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对象。