在下面的 2 个链接中,我发现 Object 和 object 是可以互换的:

Difference between Object and object

c#: difference between "System.Object" and "object"

但我只是不明白为什么我不能让下面的代码工作, 如果 Object 和 object 可以互换:

不能用于“对象”的代码:

class A : Object
{
    public int x = 5;

}

class B : A
{
    static void Main()
    {
        System.Console.WriteLine(new B().x);
    }
}

输出:



适用于“对象”的代码:
class A : object
{
    public int x = 5;

}

class B : A
{
    static void Main()
    {
        System.Console.WriteLine(new B().x);
    }

}

输出:

最佳答案

事实上,最简单的方法是不要认为 objectObject 是可以互换的。

最好将 object 理解为 global::System.Object 的别名。因此,每当您看到 global::System.Object 作为类型名称时,您都可以使用 object 代替,反之亦然。

如果名称 Object 将被解析为 global::System.Object 类型(例如,因为您有 using 命名空间的 System 指令,并且没有其他 using 指令会导入不同的 Object 类型),您可以使用 Object 代替。

引用类型的两种方式确实引用了完全相同的类型 - 生成的代码之间没有区别:

global::System.Object foo = ...;


object foo = ...;

顺便说一下,C# 5 规范在 4.2.2 节中是这样描述的:



(在这种情况下不需要 global:: 限定,因为在规范本身中没有导入命名空间的概念......例如,System.Object 在规范中永远不会意味着 global::Foo.System.Object - 而它可以在 C# 代码中。)

10-07 19:27
查看更多