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

能否在编译时无需实例化对象获取类的属性名称?

能否在编译时无需实例化对象获取类的属性名称?

答案是完全可以!你提到的nameof()其实本身就支持在不实例化对象的前提下,直接获取类的属性名称,而且同样是编译时完成的操作。

先看你给出的需要实例化的写法:

class DummyClass { public int DummyProperty { get; set; } }
void Meth() {
    // With instantiation
    var dc = new DummyClass();
    var prname = nameof(dc.DummyProperty);
}

而无需实例化的写法更简单,直接通过类名访问属性即可:

class DummyClass { public int DummyProperty { get; set; } }
void Meth() {
    // Without instantiation, compile-time evaluation
    var prname = nameof(DummyClass.DummyProperty);
}

关键说明:

  • nameof()是编译时求值的运算符,它不需要运行时的对象实例,编译器在编译阶段就会将nameof(TypeName.MemberName)替换为对应的字符串常量(这里就是"DummyProperty")。
  • 这种写法不仅避免了不必要的对象实例化,还保留了nameof()的核心优势:比如后续重构类或属性名称时,编译器会自动同步nameof()的结果,彻底避免硬编码字符串带来的维护隐患。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:18:34