C# 反射前的静态构造函数
如果我加载一个程序集,得到一个给定类型的静态只读字段,我希望该字段在静态构造函数上初始化,并且我在该字段上调用GetValue,它会有一个值吗(因为我正在访问一个类型的字段,所以它需要进行类型初始化)C# 反射前的静态构造函数,c#,reflection,C#,Reflection,如果我加载一个程序集,得到一个给定类型的静态只读字段,我希望该字段在静态构造函数上初始化,并且我在该字段上调用GetValue,它会有一个值吗(因为我正在访问一个类型的字段,所以它需要进行类型初始化) (不,我不打算从反射调用静态构造函数…对我来说似乎是肯定的 // In SomeAssembly.dll public class TestClass { public static readonly int Field; static TestClass() {
(不,我不打算从反射调用静态构造函数…对我来说似乎是肯定的
// 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
5.
在我看来,这是一个肯定的回答
// 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
5.
你不能调用GetValue并返回值吗?看起来这很容易测试…来吧TDaver-你知道的足够多,可以自己验证!是的,我发现我把我的测试用例复杂化了:)对不起,浪费了你的时间:)你不能调用GetValue并把值取回来吗?看起来这很容易测试…来吧,TDaver-你知道的足够多了,可以自己验证这一点!是的,我发现我把我的测试用例复杂化了:)对不起,浪费了你的时间:)他说“加载一个程序集”,即使在运行时加载了带有静态字段的程序集(我想他的意思是这样的),这行得通吗?我不明白为什么不行,但我太懒了,不敢亲自尝试。@Richard:我确实试过了,是的,在那种情况下也能用。。。我将更新答案。再次感谢您的测试!我的代码不断抛出异常,我花了一段时间才发现它与静态字段无关:)他说“加载一个程序集”,即使在运行时加载了带有静态字段的程序集(我想他的意思是这样的),这是否有效?我不明白为什么不行,但我太懒了,不敢亲自尝试。@Richard:我确实试过了,是的,在那种情况下也能用。。。我将更新答案。再次感谢您的测试!我的代码不断抛出异常,我花了一段时间才发现它与静态字段无关:)