我只是想知道来自C#6的名称如何才能访问非静态属性,就像它是静态的一样。这是一个例子
www
答案 0 :(得分:9)
它不是"访问"属性 - 该运算符纯粹是一种编译器机制,用于注入" name"代码中的参数。在这种情况下,它会将nameof(TestClass.Name)
替换为"Name"
。事实上,它的非静态是无关紧要的。
答案 1 :(得分:5)
nameof
口译员在compiletime
得到解决,转而转换为static string
。
在您的情况nameof(TestClass.Name)
中,您只会将"Name"
作为字符串返回
您必须使用nameof(TestClass)
使用nameof
,您可以最大限度地减少代码中的冗余(例如:您不必使用nameof
为属性名或类似内容定义字符串。
您还可以使用它来表示类名。但要注意! nameof(MyClass)
如果你有一个派生类,可能与在运行时不一样!
出于运行时的目的,请改为使用typeOf
或.GetType()
。
在MSDN
了解详情