📜  C#|对象类别

📅  最后修改于: 2021-05-30 01:31:42             🧑  作者: Mango

Object类是.Net Framework中所有类的基类。它存在于系统名称空间中。在C#中, .NET基类库(BCL)具有特定于语言的别名,该别名是Object类,其全限定名称为System.Object 。 C#中的每个类都直接或间接地从Object类派生。如果一个类没有扩展任何其他类,则它是Object类的直接子类;如果扩展了其他类,则它是一个间接派生的。因此,对象类方法可用于所有C#类。因此,对象类充当任何C#程序中继承层次结构的根。 Object类的主要目的是为派生类提供底层服务。

C#中有两种类型,即引用类型和值类型。通过使用System.ValueType类,值类型隐式继承对象类。 System.ValueType类使用针对值类型的更适当的实现覆盖Object Class中的虚拟方法。在其他编程语言中,内置类型(如int,double,float等)没有任何面向对象的属性。若要模拟内置类型的面向对象的行为,必须将它们显式包装到对象中。但是在C#中,由于存在从System.ValueType继承而又从System.Object继承的值类型,因此我们不需要这种包装。因此,在C#中,值类型也类似于引用类型。引用类型通过使用其他引用类型直接或间接继承对象类。

上图的说明:在这里,您可以在类型层次结构的顶部看到Object类。 1类2类是引用类型。类1是直接继承Object类,而类2是通过使用类1间接继承。Struct1是通过System.ValueType类型隐式继承Object类的值类型。

例子:

// C# Program to demonstrate
// the Object class
using System;
using System.Text;
  
class Geeks {
  
    // Main Method
    static void Main(string[] args)
    {
  
        // taking object type
        Object obj1 = new Object();
  
        // taking integer
        int i = 10;
  
        // taking Type type and assigning
        // the value as type of above
        // defined types using GetType
        // method
        Type t1 = obj1.GetType();
        Type t2 = i.GetType();
  
        // Displaying result
  
        Console.WriteLine("For Object obj1 = new Object();");
  
        // BaseType is used to display
        // the base class of current type
        // it will return nothing as Object
        // class is on top of hierarchy
        Console.WriteLine(t1.BaseType);
  
        // It will return the name class
        Console.WriteLine(t1.Name);
  
        // It will return the
        // fully qualified name
        Console.WriteLine(t1.FullName);
  
        // It will return the Namespace
        // By default Namespace is System
        Console.WriteLine(t1.Namespace);
  
        Console.WriteLine();
  
        Console.WriteLine("For String str");
  
        // BaseType is used to display
        // the base class of current type
        // it will return System.Object
        // as Object class is on top
        // of hierarchy
        Console.WriteLine(t2.BaseType);
  
        // It will return the name class
        Console.WriteLine(t2.Name);
  
        // It will return the
        // fully qualified name
        Console.WriteLine(t2.FullName);
  
        // It will return the Namespace
        // By default Namespace is System
        Console.WriteLine(t2.Namespace);
    }
}

输出:

For Object obj1 = new Object();

Object
System.Object
System

For String str
System.ValueType
Int32
System.Int32
System

建设者

Constructor Description
Object() Initializes a new instance of the Object class. This constructor is called by constructors in derived classes, but it can also be used to directly create an instance of the Object class.

方法

C#Object类中总共有8种方法,如下所示:

Methods Description
Equals(Object) Determines whether the specified object is equal to the current object.
Equals(Object, Object) Determines whether the specified object instances are considered equal.
Finalize() Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.
GetHashCode() Serves as the default hash function.
GetType() Gets the Type of the current instance.
MemberwiseClone() Creates a shallow copy of the current Object.
ReferenceEquals(Object, Object) Determines whether the specified Object instances are the same instance.
ToString() Returns a string that represents the current object.

重要事项:

  • C#类不需要从Object类声明继承,因为继承是隐式的。
  • Object类中定义的每个方法在系统中的所有对象中都可用,因为.NET Framework中的所有类都是从Object类派生的。
  • 派生类可以并且确实重写Object类的Equals,Finalize,GetHashCode和ToString方法。
  • 在内部对类型进行装箱和拆箱的过程会导致性能损失。使用特定于类型的类来处理常用类型可以提高性能成本。