CLR中的類型包括如下幾種:常量,欄位,執行個體構造器,類型構造器,方法,操作符重載,轉換操作符,屬性,事件,類型。
下面我們看段代碼,並且看一看它的IL代碼
using System;
public sealed class SomeType ...{ // 1
private class SomeNestedType ...{ } // 2
private const Int32 SomeConstant = 1; // 3
private readonly Int32 SomeReadOnlyField = 2; // 4
private static Int32 SomeReadWriteField = 3; // 5
static SomeType() ...{ } // 6
public SomeType() ...{ } // 7
public SomeType(Int32 x) ...{ } // 8
private String InstanceMethod() ...{ return null; } // 9
public static void Main() ...{} // 10
public Int32 SomeProp ...{ // 11
get ...{ return 0; } // 12
set ...{ } // 13
}
public Int32 this [String s] ...{ // 14
get ...{ return 0; } // 15
set ...{ } // 16
}
public event EventHandler SomeEvent; // 17
}
從上面的IL代碼我們可以看到,屬性,索引器和事件都會被轉換成相應的方法。只要能應用在方法上的特性我們都可以應用在其上面。
說一下靜態類:可以把靜態類看成是工具類,如果查看IL代碼我們會發現編譯器會自動給靜態類加上abstract和sealed特性。
常量就是在初始化賦值後就不可以更改的欄位,在c#中可以使用關鍵字const和readonly,有什麼區別呢?
const:const在編譯後就直接替換成了具體的數值。比如一個程式需要引用程式集A中定義的常量field=500;那麼在程式編譯完之後我們將找不到field這個名稱,只能看到500這個數值。如果我們重新編譯A程式集,把field改成600,那麼運行程式,仍然會使用500這個數值。
readonly:那就不用多說什麼了,解決了上面的問題。
在實際應用中需要根據自己的需要定義常量。