You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中不创建对象执行类的静态构造函数(类比Java Class.forName)

C#中不创建对象触发静态构造函数的实现

嘿,作为C#新手能想到这个Java和C#的对比问题,挺细致的!答案是肯定的——C#里完全可以做到类似Java Class.forName() 的效果,不用创建实际对象就能触发类的静态构造函数。

先补全你提到的Java示例代码(方便对比)

import java.util.*;
import java.lang.*;

class MyClass {
    public static void main(String args[])throws ClassNotFoundException {
        // 通过Class.forName加载类,触发静态代码块
        Class.forName("Student");
    }
}

class Student {
    // Java的静态代码块
    static {
        System.out.println("Student类的静态代码块执行了!");
    }
}

对应的C#实现方式

在C#中,静态构造函数会在类第一次被访问时自动执行,包括以下场景:

  • 访问类的静态成员
  • 使用typeof获取类的Type对象
  • 通过反射(比如Type.GetType)加载类的Type对象

下面是和Java示例等价的C#代码:

using System;

namespace StaticConstructorDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 方式1:通过反射获取类型,触发静态构造函数
            // 注意要写完整的类型名(命名空间+类名)
            Type studentType = Type.GetType("StaticConstructorDemo.Student");

            // 方式2:如果已经明确知道类,直接用typeof也能触发
            // Type studentType = typeof(Student);
        }
    }

    class Student
    {
        // C#的静态构造函数,写法是static + 类名
        static Student()
        {
            Console.WriteLine("Student类的静态构造函数执行了!");
        }
    }
}

额外说明

如果你的Student类在另一个独立的程序集(比如DLL文件)中,需要先加载程序集再获取类型,示例代码如下:

using System.Reflection;

// 加载指定程序集
Assembly assembly = Assembly.LoadFrom("YourAssembly.dll");
// 获取完整类型名的Type对象,触发静态构造函数
Type studentType = assembly.GetType("YourNamespace.Student");

内容的提问来源于stack exchange,提问作者karun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:40:54