c# - 为什么类成员的名称不能与其嵌套类之一相同?

标签 c# properties conflict nested-class

或者为什么以下是不可能的:

class Material
{
    class Keys
    {
        ...
    }

    Material.Keys Keys { get; set; } // Illegal
}

我没有看到任何可能的歧义。当被实例访问时,返回属性。静态访问时,返回类。还是我遗漏了什么?

我不是在要求“修复”(我知道我可以将其命名为不同的名称,例如 MaterialKeys 等),但更多的是此限制背后的技术原因。

最佳答案

但是想象一下你有这个:

class Material
{
    class Keys
    {
        ...
    }

    static Material.Keys Keys = new Keys();
}

现在两者都处于“静态”范围。现在,编译器可以在所有情况下消除歧义吗?如果不是,则不允许这样做。

我想消除歧义可能适用于静态字段/属性/方法,但不适用于实例成员。或者反过来。如果是这种情况,您是否希望语言规范允许实例成员与内部类同名,但不允许它用于静态?那只会让人感到困惑。

但是,无论如何,让成员与内部类的名称相匹配是相当令人困惑的。

关于c# - 为什么类成员的名称不能与其嵌套类之一相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4731296/

相关文章:

c# - 在小写和大写之间添加间距?

如果属性访问 C# Struct 方法不保存值

java - JNDI 属性(java.naming.factory.initial 和 java.naming.provider.url)未通过 Spring 的 PropertyPlaceholderConfigurer 设置

javascript - 在同一网页上同时使用 jquery 和基于原型(prototype)的组件时发生冲突

Ruby/JRuby 冲突 - RUBYOPT -F {RuntimeError} 中的无效开关

java - Java模块协助: Module 'name' reads package 'javafx.beans'

c# - 这个简单的代码产生了死锁。包括简单的示例程序

c# - Silverlight:单击子按钮时将焦点放在父 ListBox 项上

c# - 发送电子邮件后清除 MVC 中文本字段中的数据

java - 如何在java中只加载一次属性?