我了解指针以及在 C# 代码中使用它们的罕见需求。我的问题是:必须在代码块中明确声明“不安全”背后的原因是什么。此外,为什么必须更改编译器选项以允许“不安全”代码?
底线:CLR(或语言规范)中的什么使得我们不能在需要时就使用指针(就像 C 和 C++ 一样)而不必键入“不安全”并更改编译器选项?
澄清一下:我知道什么是“不安全”和“安全”代码。这只是一个问题:为什么我们必须做所有额外的工作(好吧,不是那么多额外的工作)才能使用这些功能。
C# 创建者 Anders Hejlsberg 的采访谈到了这个主题here。基本上,正如 @Marc Gravell 所说:类型安全第一,显式声明不安全。
所以回答你的问题:CLR 中没有任何东西可以阻止它;这是一种语言习语,旨在让您在处理类型时可以戴着安全手套。如果你想脱掉手套,那是你的选择,但你必须主动选择脱掉手套。
Edit:
澄清一下:我知道什么
“不安全”和“安全”代码是一样的。只是
为什么我们必须做所有的事情
额外的工作(好吧,没有那么多额外的工作)
只是为了能够使用这些功能。
正如我链接的采访中提到的,这是一个明确的设计决定。 C# 本质上是 Java 的演变,而在 Java 中,根本没有指针。但设计者希望允许指针;然而,由于 C# 通常会引入 Java 开发人员,因此他们认为最好default行为与 Java 类似,即没有指针,同时仍然允许通过显式声明使用指针。
所以“额外的工作”是故意强迫你在做之前思考你在做什么。通过明确,它迫使你至少考虑:“我为什么要这样做?我这样做吗?”really当引用类型就足够时还需要指针吗?”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)