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方法。
- 在内部对类型进行装箱和拆箱的过程会导致性能损失。使用特定于类型的类来处理常用类型可以提高性能成本。