System.Object如何使用子类作为返回类型?

Dom*_*icz 1 .net clr inheritance paradox

在.NET中,所有类型都继承自System.Object.

我发现矛盾的是System.Object上的一些方法 - 即

  • public virtual string ToString();
  • public virtual bool Equals(object objA,object objB);

System.String继承自System.Object:

[Serializable]
public class String : Object { /*...*/ }
Run Code Online (Sandbox Code Playgroud)

System.Boolean继承自System.Object:

[Serializable]
public struct Boolean : Object { /*....*/ }
Run Code Online (Sandbox Code Playgroud)

允许System.Object类允许子类在其方法上用作返回类型的内幕是什么?这个代码是如何编译的,因为似乎有一个循环引用.String < - > Object < - > Boolean.

我确信我会看到关于"它是如何实现的"的语句,但是我可以理解这些返回类型是否是"System.Object"本身,然后一个子类使用了string,bool和的实现.其他System.ValueTypes声明一个新的基类.

我希望这是有道理的.

提前致谢,

多米尼克

Tho*_*que 7

这没什么大不了的,基类总能引用子类.例如,此代码完全合法:

class A
{
    public B CreateB();
    {
        return new B();
    }
}

class B : A
{
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果A和B在单独的程序集中定义,那是一个问题,因为这将需要循环程序集引用,这是不允许的