2011-02-22 132 views
0

如果我加載一個程序集,並獲得給定類型的靜態只讀字段,並且我期望該字段在靜態構造函數上初始化,並且我在該字段上調用GetValue,它是否會有值因爲我正在訪問一個類型的字段,所以它需要被初始化)?靜態構造函數之前反射

(不,我不打算調用從反射靜態構造函數...)

+0

你是不是能夠調用的GetValue和獲得的價值了? – 2011-02-22 16:35:39

+3

看起來像這樣會很容易測試... – 2011-02-22 16:36:47

回答

6

貌似是給我。

// In SomeAssembly.dll 
public class TestClass 
{ 
    public static readonly int Field; 

    static TestClass() 
    { 
     Field = 5; 
    } 
} 

// In its own assembly 
public class Program 
{ 
    public static void Main() 
    { 
     BindingFlags bindingFlags = BindingFlags.Static | BindingFlags.Public; 

     Assembly someAssembly = Assembly.LoadFile(@"Path\To\SomeAssembly.dll"); 

     object field = someAssembly.GetType("TestClass") 
            .GetField("Field", bindingFlags) 
            .GetValue(null); 

     Console.WriteLine(field); 
    } 
} 

輸出:

 
5