名字是怎么起作用的?

本文关键字:起作用 | 更新日期: 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阅读更多