代码之家  ›  专栏  ›  技术社区  ›  Ram

为什么.Net中的每个类都来自系统。对象?有什么好处?

  •  8
  • Ram  · 技术社区  · 15 年前

    为什么.Net中的每个类都来自系统。对象?有什么好处?

    4 回复  |  直到 15 年前
        1
  •  5
  •   Chris Schmich    15 年前

    我向你提出相反的问题:为什么不呢?如果不是为了某个共同的祖先,您将如何引用“任何类型的某个对象”?有时候这是需要的。不过,真的吗 System.Object 类确实有一些通常对任何类型都有用的方法:

    • Equals 帮助测试相等性
    • GetHashCode 有助于提高收藏的性能
    • GetType -所有对象都有某种类型
    • Finalize 支持CLR终结

    因为这些东西对所有类型都是通用的,所以您可以拥有在多个类型上智能操作的代码(甚至在泛型之前)。

    尽管如此,在C#4.0中,他们引入了 dynamic 它实际上是一个自己的类层次结构。它完全绕过静态类型检查,不一定从 object . MSDN有一个 good article Chris Burrows' blog series 也很有趣。

        2
  •  1
  •   Jason Williams    15 年前

    您还可以将任何内容作为“对象”进行一般性传递,这是一种比使用空指针更好的方法。

        3
  •  0
  •   Bradley Smith    15 年前

    如果没有这种行为:

    • 您将无法在标准(非泛型)集合中存储类的实例。
    • 您将无法依赖到字符串类型的隐式转换。

    另外,如果我没弄错的话,.NET的整个内存管理模型都是围绕System.Object 类型。

        4
  •  0
  •   gotopie    15 年前

    SomeClass obj = new SomeClass();
    void* pObj = &obj;
    

    由于继承,您可以将其用于引用类型(和通过装箱的值类型,但这实际上不是一回事):

    object pObj = obj;
    

    当然还有其他好处,但我主要看到 object 作为空指针的替代。