Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 反射前的静态构造函数_C#_Reflection - Fatal编程技术网

C# 反射前的静态构造函数

C# 反射前的静态构造函数,c#,reflection,C#,Reflection,如果我加载一个程序集,得到一个给定类型的静态只读字段,我希望该字段在静态构造函数上初始化,并且我在该字段上调用GetValue,它会有一个值吗(因为我正在访问一个类型的字段,所以它需要进行类型初始化) (不,我不打算从反射调用静态构造函数…对我来说似乎是肯定的 // In SomeAssembly.dll public class TestClass { public static readonly int Field; static TestClass() {

如果我加载一个程序集,得到一个给定类型的静态只读字段,我希望该字段在静态构造函数上初始化,并且我在该字段上调用GetValue,它会有一个值吗(因为我正在访问一个类型的字段,所以它需要进行类型初始化)


(不,我不打算从反射调用静态构造函数…

对我来说似乎是肯定的

// 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:我确实试过了,是的,在那种情况下也能用。。。我将更新答案。再次感谢您的测试!我的代码不断抛出异常,我花了一段时间才发现它与静态字段无关:)