2011-02-22 152 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