我懷疑const
被簡化爲一般的語言簡單的C#規範。是否有一個特定的原因,我們不能像C++那樣將變量引用或方法聲明爲const
?例如:
const MyObject o = new MyObject(); // Want const cast referenece of MyObject
o.SomeMethod(); // Theoretically legal because SomeMethod is const
o.ChangeStuff(); // Theoretically illegal because ChangeStuff is not const
class MyObject
{
public int val = 0;
public void SomeMethod() const
{
// Do stuff, but can't mutate due to const declaration.
}
public void ChangeStuff()
{
// Code mutates this instance. Can't call with const reference.
val++;
}
}
你的意思是,除了「因爲C++風格的'const'具有深遠的影響,它真的很難做到(從設計和實現POV),並且沒有運行時支持」。這是一個有用的,但非常昂貴的功能。 FWIW,F#採用相反的方法:*除非聲明爲這樣,否則無*是可變的。不過,與框架的交互可能並不明顯。 – 2010-06-03 17:21:00
我不同意這是一個確切的副本。舊的問題詢問如何在代碼中實現這一點。 @spoulson詢問爲什麼它不在編譯器中。 – 2010-06-03 17:27:01
需要強制執行正確性纔有意義。當任何支持.NET的語言可以使用另一種語言創建的類型時,這變得很困難。可能有近一百個。所有這些語言的語法都需要修改,以適應聲明常量屬性,並調整編譯器來校驗它們。 換句話說,const正確性非常不符合CLS。 – 2010-06-03 17:32:52