當我第一次看到C#中的值類型時,我認爲的第一件事是「哇,多麼好的優化」,第二件事是,「我們真的需要一種新的語言結構嗎?我們不能用註釋來做到這一點代替?」。可以通過內聯實現值類型嗎?
的想法是,給定的一類,我們將使用它,因爲我們總是這樣
class A {int i;}
class B {
A m_a;
int F(A a) {m_a = a;}
}
一時興起,我們會改變A
是
[ValueType]
class A {int i;int j;}
編譯器會自動轉換B
類是
class B {
#region A
int A_i;
int A_j;
#endregion
int F(/*A param*/int i,int j) {
#region A_assign
A_i = i;
A_j = j;
#endregion
}
請記住,如果沒有按編譯」不希望優化某個實例 - 它不必。它會以任何方式工作。
它可能出現的問題與模板,
int f<T>() {
T t; // how much stack should I allocate
}
,但我不知道它比目前的情況更糟糕。我實際上不確定現在會發生什麼(f<struct_of_100_bytes>
與f<int>
不同?)。
您可以隨時退回到常規的對象(你犯了一個非常的混亂對象沒有內聯的嗎? )我並沒有真正看到(如在不明白,不同意),繼承(C++是否值類型繼承),數組,參數或泛型,還是實現接口乾擾內聯,在這三種情況下似乎都是可能的,你可以擴展一下嗎?也許一個例子會有幫助。 –
@Elazar在傳遞接口作爲參數的情況下,例如,它根本沒有意義 - 調用者不會知道什麼但在一般情況下,這與結構體的工作方式非常相似,不知道這裏的意思是什麼 –
哦,我明白了,當傳遞一個實現接口的結構體作爲函數參數時。這種情況下,我的意思是後備。)謝謝。另一個問題是,我聽說虛擬機本身支持值類型,而且單獨編譯器的合作似乎是可能的。 –