zoukankan      html  css  js  c++  java
  • C# 之 System.Object

    System.Object
        C#中全部的类都直接或间接继承自System.Object类,这使得C#中的类得以单根继承。假设我们没有明白指定继承类,编译器缺省觉得该类继承自System.Object类。System.Object类也可用小写的objectkeyword表示,两者全然等同。
        由于全部的类都继承与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));
             }
        }


    6.protected Object MemberWiseClone()
        通过创建一个新对象实例并复制成员,以复制该对象。成员拷贝不会得到这些成员的新实例。新对象的不论什么引用类型成员都将引用于源类同样的对象,这种方法是受保护的,所以仅仅能在类或派生的类中使用

    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;
        }


    7.public virtual string ToString()
        返回一个相应于实例的字符串。默认情况下,这是一个类类型的限定名称,但能够重写它,给类型提供合适的实现方式。默认情况下返回的是该对象所属类型的全名称。继承类能够重写该方法,以便自己定义显示输出内容,假设继承类须要控制很多其它格式化输出,则须要实现IFormattable接口








  • 相关阅读:
    程序员年后离职跳槽指南
    程序员年后离职跳槽指南
    程序员为什么会有职业瓶颈?
    程序员为什么会有职业瓶颈?
    年过35岁的程序员都去哪了?一张图道尽老程序员们的花样出路
    年过35岁的程序员都去哪了?一张图道尽老程序员们的花样出路
    对于Ping的过程,你真的了解吗?
    对于Ping的过程,你真的了解吗?
    shell解析命令行的过程以及eval命令
    shell的命令替换和命令组合
  • 原文地址:https://www.cnblogs.com/yxwkf/p/3856124.html
Copyright © 2011-2022 走看看