名字是怎么起作用的?
本文关键字:起作用 | 更新日期: 2023-09-27 18:06:32
我只是想知道c# 6中的name是如何访问非静态属性的,就像它是静态的一样。下面是一个例子
public class TestClass
{
public string Name { get; set; }
}
public class Test
{
public Test()
{
string name = nameof(TestClass.Name); // whats so speciall about nameof
//string name2 = TestClass.Name; this won't compile obviously,
}
}
这不是"访问"属性——该操作符纯粹是一种编译器机制,用于将参数的"名称"注入代码。在这种情况下,它将用"Name"
代替nameof(TestClass.Name)
。它是非静态的这一事实无关紧要。
nameof
解释器在compiletime
被解析并翻译为static string
。
在nameof(TestClass.Name)
的情况下,您将只返回"Name"
作为字符串。
你必须使用nameof(TestClass)
。
有了nameof
,你可以尽量减少代码中的冗余(例如:你不必为属性名或类似的东西定义一个字符串,使用nameof
。
也可以用它来表示类名。但是要注意!nameof(MyClass)
如果您有派生类,则可能与运行时不同!对于运行时的目的,使用typeOf
或.GetType()
代替。
在MSDN阅读更多