1
17
如果查看Reflector中的getType()声明,您会发现:
属性和外部的组合意味着该方法实际上是在.NET运行时本身内部的非托管代码中实现的。中的guid问题 this article 进一步的细节。在确定了如果在较低的级别处理类型会更快之后,他们显然是出于性能原因而这样做的。 这导致了两个原因,即不将getType方法实现为属性。首先,不能像使用方法那样定义属性extern,因此需要在本机.NET代码中处理它。其次,即使可以将它们定义为外部的,从属性内部执行不安全的、非托管的调用也肯定会违反属性使用准则,因为很难保证没有副作用。 |
2
7
指导方针说,属性应该表示对象的状态,它不应该是昂贵的性能方面的,并且除了计算/设置该状态之外,它不应该有副作用。我猜getType()不遵守这些规则,所以它们将其作为一个方法。 getType()是一个稍微昂贵的操作。如果它是一种财产,它会鼓励像
等。 而不是
这并不是最理想的。因此,他们提出了一种方法,建议应该谨慎地调用它。 |
3
3
据我所知,对于使用属性计算要公开的内部字段或值,以及使用方法公开可能需要更多时间或其他资源计算的其他值,通常认为这是一种良好的实践。 |
4
3
只有Microsoft才能回答这个问题,但我认为这是因为.NET框架中的几个类使用额外的参数创建了自己的getType()的重载版本。如果它是一个属性,它们就不能使用相同的名称(因为属性没有参数)。 只是我对这个问题的想法。 |
5
2
回答得有点晚,但在试图找到相关的问题时突然陷入了困境。 getType可以引发异常。框架准则声明属性不应抛出异常。这也是为什么它应该是方法而不是属性的另一个原因。 |
Emopusta · 从后端到前端的图像路径不工作 2 年前 |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
Niyazi Babayev · 如何在表达式中动态应用表达式? 2 年前 |
Dansih · .Net核心自定义身份验证方案 2 年前 |
lolorekkk · 面板插入。NET WinForm 2 年前 |