1)什麼是int
?它與struct
System.Int32
有什麼不同?我知道前者是CLR類型System.Int32
的C#別名(typedef
或#define
當量)。這種理解是否正確?幾個C#語言問題
2)當我們說:
IComparable x = 10;
是,像他說:
IComparable x = new System.Int32();
但我們不能new
一個結構,對不對?
或用C等的語法:
struct System.In32 *x;
x=>someThing = 10;
3)什麼是String
與大寫小號?我在Reflector中看到它是sealed
String
類,它當然是一個引用類型,與上面的System.Int32
不同,它是一個值類型。
什麼是string
,但沒有資金的s,但?那也是這個類的C#別名嗎?
爲什麼我在Reflector中看不到別名定義?
4)如果你願意的話,試着跟隨我這個微妙的思路。我們知道特定類型的存儲位置只能訪問其接口上的屬性和成員。這意味着:
Person p = new Customer();
p.Name = "Water Cooler v2"; // legal because as Name is defined on Person.
但
// illegal without an explicit cast even though the backing
// store is a Customer, the storage location is of type
// Person, which doesn't support the member/method being
// accessed/called.
p.GetTotalValueOfOrdersMade();
現在,與推論,考慮此方案:
int i = 10;
// obvious System.object defines no member to
// store an integer value or any other value in.
// So, my question really is, when the integer is
// boxed, what is the *type* it is actually boxed to.
// In other words, what is the type that forms the
// backing store on the heap, for this operation?
object x = i;
更新
謝謝您的回答,埃裏克Gunnerson和Aaronought。恐怕我沒有足夠清晰地表達我的問題以吸引非常滿意的答案。麻煩的是,我從表面上知道我的問題的答案,而且我決不是一個新手程序員。
但我不得不承認,只要我是一名程序員,即使我編寫了正確的代碼,但對於語言及其底層平臺/運行時處理類型存儲的複雜性的深入理解, 。
請不要在同一個問題提交多個不相關的問題。 – 2010-05-20 23:29:32
「我們不能新建一個結構體」:是的,我們可以......爲什麼我們不能? – 2010-05-21 00:51:16