gpt4 book ai didi

c# - 为什么 Object.GetType() 是方法而不是属性?

转载 作者:可可西里 更新时间:2023-11-01 08:16:06 25 4
gpt4 key购买 nike

从设计的角度来看,我想知道为什么 .NET 的创建者选择了 System.Object.GetType() 而不是 System.Object.Type 只读属性。

这只是一个(非常小的)设计缺陷还是有其背后的基本原理?欢迎任何灯光。

最佳答案

如果您查看 Reflector 中的 GetType() 声明,您会发现:

[MethodImplAttribute(MethodImplOptions.InternalCall)]
public extern Type GetType();

attribute 和 extern 的组合意味着此方法实际上是在 .NET 运行时本身内部的非托管代码中实现的。 this article 中的 GUID 问题进入进一步的细节。在确定如果在较低级别处理时确定类型会更快之后,他们显然出于性能原因这样做了。

这导致不将 GetType 方法实现为属性的两个原因。首先,您不能像使用方法那样定义属性 extern,因此它需要在 native .NET 代码中处理。其次,即使您可以将它们定义为 extern,从属性内部执行不安全、非托管的调用肯定会违反属性使用准则,因为很难保证没有副作用。

关于c# - 为什么 Object.GetType() 是方法而不是属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/980439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com