System.Object
C#中所有的类都直接或间接继承自System.Object类,这使得C#中的类得以单根继承。如果我们没有明确指定继承类,编译器缺省认为该类继承自System.Object类。System.Object类也可用小写的object关键字表示,两者完全等同。
因为所有的类都继承与System.Object,所以这些类都可以访问该类中受保护的成员和公共的成员。下面我们就一起来看看可使用的成员有哪些。
1.public Object()
System.Object类型的构造函数,直接使用new Object()可以用来创建对象;如果非Object类型,则由派生类型的构造函数自动调用。
2.public virtual bool Equals(Object obj)
把调用该方法的对象与另一个对象相比,如果它们相等,就返回true。默认的实现代码会查看对象的参数是否引用了同一个对象(因为对象是引用类型)。如果想以不同的方式来比较对象,则可以重写该方法
例如,比较两个对象的状态:public static bool Equals(Object objA,Object ObjB)
静态方法Equals(object objA,object objB)首先检查两个对象objA和objB是否都为null,如果是则返回true,否则进行objA.Equals(objB)调用并返回其值。问题归结到实例方法Equals(object obj)。该方法缺省的实现其实就是{return this= =obj;}也就是判断两个对象是否引用相等。
该方法返回true的条件:objA和objB是同一个实例或着objA和objB都是null或者objA.Equals(objB)
3.public virtual int GetHashCode()
用作对象的散列函数,这是一个必选函数,返回一个以压缩形式标识的对象状态的值。适用于哈希算法和诸如哈希表之类的数据结构。
如果两个对象的比较结果相等,则每个对象的 GetHashCode 方法都必须返回同一个值。但是,如果两个对象的比较结果不相等,则这两个对象的 GetHashCode 方法不一定返回不同的值。
一个对象的 GetHashCode 方法必须总是返回同一个哈希代码,但前提是没有修改过对象状态,对象状态用来确定对象的 Equals 方法的返回值。请注意,这仅适用于应用程序的当前执行,再次运行该应用程序时可能会返回另一个哈希代码。
4.public Type GetType()
以System.Type对象的形式返回对象的类型
5.public static bool ReferenceEquals(Object objA,Object objB)
这个方法比较传送给它的两个对象,看看他们是否是同一个实例的引用。如果objA与objB是相同的实例,或者如果二者都是为空引用,则为true;否则为false
通过创建一个新对象实例并复制成员,以复制该对象。成员拷贝不会得到这些成员的新实例。新对象的任何引用类型成员都将引用于源类相同的对象,这个方法是受保护的,所以只能在类或派生的类中使用
返回一个对应于实例的字符串。默认情况下,这是一个类类型的限定名称,但可以重写它,给类型提供合适的实现方式。默认情况下返回的是该对象所属类型的全名称。继承类可以重写该方法,以便自定义显示输出内容,如果继承类需要控制更多格式化输出,则需要实现IFormattable接口
C#中所有的类都直接或间接继承自System.Object类,这使得C#中的类得以单根继承。如果我们没有明确指定继承类,编译器缺省认为该类继承自System.Object类。System.Object类也可用小写的object关键字表示,两者完全等同。
因为所有的类都继承与System.Object,所以这些类都可以访问该类中受保护的成员和公共的成员。下面我们就一起来看看可使用的成员有哪些。
1.public Object()
System.Object类型的构造函数,直接使用new Object()可以用来创建对象;如果非Object类型,则由派生类型的构造函数自动调用。
2.public virtual bool Equals(Object obj)
把调用该方法的对象与另一个对象相比,如果它们相等,就返回true。默认的实现代码会查看对象的参数是否引用了同一个对象(因为对象是引用类型)。如果想以不同的方式来比较对象,则可以重写该方法
例如,比较两个对象的状态:public static bool Equals(Object objA,Object ObjB)
静态方法Equals(object objA,object objB)首先检查两个对象objA和objB是否都为null,如果是则返回true,否则进行objA.Equals(objB)调用并返回其值。问题归结到实例方法Equals(object obj)。该方法缺省的实现其实就是{return this= =obj;}也就是判断两个对象是否引用相等。
该方法返回true的条件:objA和objB是同一个实例或着objA和objB都是null或者objA.Equals(objB)
3.public virtual int GetHashCode()
用作对象的散列函数,这是一个必选函数,返回一个以压缩形式标识的对象状态的值。适用于哈希算法和诸如哈希表之类的数据结构。
如果两个对象的比较结果相等,则每个对象的 GetHashCode 方法都必须返回同一个值。但是,如果两个对象的比较结果不相等,则这两个对象的 GetHashCode 方法不一定返回不同的值。
一个对象的 GetHashCode 方法必须总是返回同一个哈希代码,但前提是没有修改过对象状态,对象状态用来确定对象的 Equals 方法的返回值。请注意,这仅适用于应用程序的当前执行,再次运行该应用程序时可能会返回另一个哈希代码。
4.public Type GetType()
以System.Type对象的形式返回对象的类型
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
MyBaseClass myBase=new MyBaseClass();
MyDerivedClass myDerived=new MyDerivedClass ();
object o=myDerived ;
MyBaseClass b=myDerived;
Console.WriteLine("mybase:Type is {0}",myBase.GetType ());
Console.WriteLine("myDerived:Type is {0}",myDerived .GetType ());
Console.WriteLine("object o=myDerived:Type is {0}",o.GetType ());
Console.WriteLine("MyCassClass b=myDerived:Type is {0}",b.GetType ());
}
}
public class MyBaseClass:object
{
}
public class MyDerivedClass:MyBaseClass
{
}
5.public static bool ReferenceEquals(Object objA,Object objB)
这个方法比较传送给它的两个对象,看看他们是否是同一个实例的引用。如果objA与objB是相同的实例,或者如果二者都是为空引用,则为true;否则为false
class Program
{
static void Main(string[] args)
{
object o = null;
object p = null;
object q = new object();
Console.WriteLine(object.ReferenceEquals(o, p));
p = q;
Console.WriteLine(object.ReferenceEquals(p, q));
Console.WriteLine(object.ReferenceEquals(o, p));
}
}
通过创建一个新对象实例并复制成员,以复制该对象。成员拷贝不会得到这些成员的新实例。新对象的任何引用类型成员都将引用于源类相同的对象,这个方法是受保护的,所以只能在类或派生的类中使用
class MyDerivedClass:MyBaseClass
{
static void Main(string[] args)
{
MyDerivedClass m1 = new MyDerivedClass();
m1.age=42;
m1.name="Sam";
MyDerivedClass m2 = (MyDerivedClass)m1.MemberwiseClone();
Console.WriteLine(m2.name);
Console.WriteLine(m2.age);
}
}
class MyBaseClass
{
public string name;
public int age;
}
返回一个对应于实例的字符串。默认情况下,这是一个类类型的限定名称,但可以重写它,给类型提供合适的实现方式。默认情况下返回的是该对象所属类型的全名称。继承类可以重写该方法,以便自定义显示输出内容,如果继承类需要控制更多格式化输出,则需要实现IFormattable接口