名称如何工作?
How does nameof work?
我只是想知道 C# 6 中的 nameof 为什么可以访问非静态 属性 就像它是静态的一样。这是一个例子
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,
}
}
它不是 "accessing" 属性 - 该运算符纯粹是一种编译器机制,用于将参数的 "name" 注入代码。在这种情况下,它将用 "Name"
替换 nameof(TestClass.Name)
。它是非静态的这一事实无关紧要。
nameof
口译员在 compiletime
处解析并翻译成 static string
。
在你的情况下 nameof(TestClass.Name)
你只会 return "Name"
作为一个字符串。
你必须使用 nameof(TestClass)
.
使用 nameof
您可以最大限度地减少代码中的冗余(例如:您不必使用 nameof
.
为属性名称或类似的东西定义字符串
您也可以用它来表示一个 classes 名称。但请注意! nameof(MyClass)
如果你有一个派生的class,可能与运行时不同!
出于运行时目的,请改用 typeOf
或 .GetType()
。
在 MSDN
阅读更多内容
我只是想知道 C# 6 中的 nameof 为什么可以访问非静态 属性 就像它是静态的一样。这是一个例子
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,
}
}
它不是 "accessing" 属性 - 该运算符纯粹是一种编译器机制,用于将参数的 "name" 注入代码。在这种情况下,它将用 "Name"
替换 nameof(TestClass.Name)
。它是非静态的这一事实无关紧要。
nameof
口译员在 compiletime
处解析并翻译成 static string
。
在你的情况下 nameof(TestClass.Name)
你只会 return "Name"
作为一个字符串。
你必须使用 nameof(TestClass)
.
使用 nameof
您可以最大限度地减少代码中的冗余(例如:您不必使用 nameof
.
您也可以用它来表示一个 classes 名称。但请注意! nameof(MyClass)
如果你有一个派生的class,可能与运行时不同!
出于运行时目的,请改用 typeOf
或 .GetType()
。
在 MSDN
阅读更多内容