C# 之 System.Object

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 
    {


    }

C# 之 System.Object


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

C# 之 System.Object

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

C# 之 System.Object

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/118932.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • ucinet网络分析实例(网络分析app)

    ucinet介绍UCINET为菜单驱动的Windows程序,可能是最知名和最经常被使用的处理社会网络数据和其他相似性数据的综合性分析程序。与UCINET捆绑在一起的还有Pajek、Mage和NetDraw等三个软件。UCINET能够处理的原始数据为矩阵格式,提供了大量数据管理和转化工具。该程序本身不包含网络可视化的图形程序,但可将数据和处理结果输出至NetDraw、Pajek、Mage和Kr…

  • Python数据分析的过程记录(二)

    Python数据分析的过程记录(二)Python数据分析的过程记录(二)文章目录Python数据分析的过程记录(二)一、需求介绍二、需求分析三、代码实现一、需求介绍二、需求分析三、代码实现

  • MATLAB中向量_向量法表示字符串

    MATLAB中向量_向量法表示字符串Matlab中的向量和数组(超详细)文章目录Matlab中的向量和数组(超详细)Matlab中的向量介绍创建向量向量的大小索引向量数值索引逻辑索引缩短向量向量运算算术运算逻辑运算sum()、min()、max()、round()、ceil()、floor()、fix()切片Maltab中的数组数组的属性创建数组访问数组元素数组运算数组的算术运算数组的逻辑运算sum()、max()、min()、……

    2022年10月29日
  • mac笔记本卡顿怎么办_电脑卡顿不流畅怎么办

    mac笔记本卡顿怎么办_电脑卡顿不流畅怎么办打开活动监视器,(启动台–其他–活动监测器),可以看到耗CPU,内存的具体应用都有哪些。如果能查到就往这方面去停止运行。一般都是图形的操作特别耗内存,可以关闭adboe的一些配置。我出现问题是安装了PS,他的adobe监听实时更新耗了系统70%内存。……

  • sae wpa3加密方式_WPA3:四大安全新特性技术分析

    sae wpa3加密方式_WPA3:四大安全新特性技术分析周一晚些时候,包括苹果、思科、英特尔、高通和微软等科技巨头在内的Wi-Fi联盟正式推出了新的Wi-Fi安全标准WPA3。这个标准将解决所有已知的、会影响重要标准的安全问题,同时还针对KRACK和DEAUTH等无线攻击给出缓解措施。WPA3为支持Wi-Fi的设备带来重要改进,旨在增强配置、加强身份验证和加密等问题。重要改进主要包括:防范暴力攻击、WAP3正向保密、加强公共和…

  • vue生成二维码并下载[通俗易懂]

    vue生成二维码并下载[通俗易懂]vue生成二维码图片,这里使用的是qrcode.js这个插件1、下载插件npminstall–saveqrcodejs22、组件内使用<template><Buttontype=”primary”size=”small”@click=”getScan()”>扫一扫</Button><Buttontype=”primary”size=”small”@click=”getDownload()”>下载</Bu..

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号