System.Object的BaseType应该与接口相同吗?

Ken*_*Kin 5 .net c# reflection types

  • 摘要

    typeof(ISomeInterface).BaseTypenull; typeof(object).BaseType也是null根据定义.从而:

    typeof(object).BaseType==typeof(ISomeInterface).BaseType -> true 
    
    Run Code Online (Sandbox Code Playgroud)

    它(语义上)可能意味着System.Object一个接口,不是吗?在c#中,所有类都继承自System.Object,但接口不继承.接口实际上是契约,而不是任何类的基类型,并且只能从其他接口派生.

    所以我想知道是否typeof(object).BaseType应该与接口相同?

  • 说明

    我认为这是基本的数学逻辑.I处理null0typeof(object)1,使得找到的基类型某种类型的就像找到许多的因素.

    在这种假设下,null可以是任何类型的推导,例如0任意数量的倍数.并且typeof(object)将是任何类的基本类型,就像1是任何数字的因素,甚至本身.实际归国nulltypeof(object).BaseType,但是,打破了这一假设.这似乎说这0是一个因素,1但不是任何其他数字的因素.

    此外,如果我们使用一种方法来SomeType递归地找到基类型,我们不能总是说它SomeType不是一个类,因为它BaseTypenull,typeof(object).BaseType也是null.

    如果这似乎是矛盾的

    typeof(object).BaseType==typeof(object) -> true 
    
    Run Code Online (Sandbox Code Playgroud)

    提出它的基本类型本身,但实际上并不是实体和合同之间的区别?


更新:

我最初说过:

它可能意味着System.Object一个接口,不是吗?

我想说的是它似乎很困惑.这是我表达不好的描述的错,并且很抱歉导致答案集中在那上面.

Tho*_*ena 7

接口是两回事.以下表达式:

typeof(object).BaseType == typeof(SomeInterface).BaseType
Run Code Online (Sandbox Code Playgroud)

是真的只是因为以下情况也是如此:

null == null
Run Code Online (Sandbox Code Playgroud)

并且,根据定义,如果当前类型表示对象类或接口,则BaseType返回null.

它可能意味着System.Object也是一个接口,不是吗?

实际上不是,因为接口只包含方法的签名,而不包含它们的实现.您可以将接口视为类必须实现的合同.


Sam*_*ell 6

BaseType属性返回具有基本类型的类型基本类型.对于所有其他类型,则返回指示该类型不具有值基本类型.您在原始问题中提出以下表达式:

typeof(object).BaseType == typeof(SomeInterface).BaseType

然后你建议,因为这个表达式是真的,Object并且SomeInterface看起来具有相同的基类型.但是,您的结论存在缺陷,因为它假定两者都存在基类型,Object并且SomeInterface当方法的文档明确指出不是这种情况时.