从设计的角度来看,我想知道为什么.NET创建者选择System.Object.GetType()而不是System.Object.Type只读属性.
它只是一个(非常小的)设计缺陷还是存在背后的理由?任何灯都欢迎.
Mar*_*ris 17
如果你看一下Reflector中的GetType()声明,你会发现:
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public extern Type GetType();
Run Code Online (Sandbox Code Playgroud)
属性和外部的组合意味着该方法实际上是在.NET运行时本身内部的非托管代码中实现的.在GUID问题这篇文章进入进一步的细节.在确定如果在较低级别处理后确定类型会更快时,他们显然是出于性能原因而这样做了.
这导致了两个不将GetType方法实现为属性的原因.首先,您无法使用方法定义属性extern,因此需要在本机.NET代码中进行处理.其次,即使您可以将它们定义为extern,从属性内部执行不安全的非托管调用肯定会破坏属性使用的准则,因为更难以保证没有副作用.
指南说,属性应该代表对象的状态,它不应该是昂贵的性能,并且除了计算/设置该状态之外它不应该具有副作用.我的猜测是GetType()不遵守这些规则,因此他们将其作为一种方法.
GetType()是一个稍微昂贵的操作.如果它是一个属性,它会鼓励使用像
DoStuff(obj.Type);
....
DoStuff(obj.Type);
Run Code Online (Sandbox Code Playgroud)
等等
代替
Type type = obj.GetType();
DoStuff(type);
....
DoStuff(type);
Run Code Online (Sandbox Code Playgroud)
那不是那么理想.因此,他们提出了一种建议应该谨慎使用它的方法.
归档时间: |
|
查看次数: |
1571 次 |
最近记录: |