在下面的 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);
}
}
输出:
最佳答案
事实上,最简单的方法是不要认为 object
和 Object
是可以互换的。
最好将 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# 代码中。)