Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 你的工作职责是什么?_C#_C# 6.0 - Fatal编程技术网

C# 你的工作职责是什么?

C# 你的工作职责是什么?,c#,c#-6.0,C#,C# 6.0,我只是想知道为什么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 //str

我只是想知道为什么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, 
    }
}

它不是“访问”属性——该操作符纯粹是一种将参数的“名称”注入代码的编译器机制。在这种情况下,它将用
“Name”
替换
nameof(TestClass.Name)
。它是非静态的这一事实与此无关

nameof
解释器在
compiletime
解析并转换为
静态字符串。
在您的例子中,
nameof(TestClass.Name)
您将只返回
“Name”
作为字符串。
您必须使用
nameof(TestClass)

使用
nameof
可以最大限度地减少代码中的冗余(例如:不必使用
nameof
为propertyname或类似的内容定义字符串)

您也可以使用它来表示类名称。但是请注意!
nameof(MyClass)

如果您有派生类,则可能与运行时不同! 出于运行时目的,请改用
typeOf
.GetType()


上阅读更多内容它没有什么特别之处。这在编译时发生,而不是在运行时。编译器将名为Name的成员转换为字符串文字“Name”没有任何问题。唯一奇怪的是,为什么它需要6个版本才能添加到语言中:)你说的“Name的
如何工作?”为什么它不起作用?您是否有类似的问题,例如、
开关
返回等。?这些是怎么工作的?编写编译器是为了理解它们,并在看到它们时生成正确的编译代码。您是否在寻找编译器工作原理的解释?然后,“太宽了”。如果不是,那么我真的不明白你在问什么。请解释到底是什么让你困惑。你可以在这里找到答案:@HansPassant告诉我们可怜的爪哇人。我很高兴它在这里,至少现在在这里;)“它将用
“TestClass.Name”
替换
nameof(TestClass.Name)
“不,它将仅用
“Name”
替换它。此外,
nameof
无法访问私有成员,您的代码工作不正常,它失败:“CS0122'A.Y'由于其保护级别而无法访问”嗯,这是可行的,但我把那部分删掉了,因为它与问题无关。我认为这是mono C#编译器中的一个bug,所以我有。