zoukankan      html  css  js  c++  java
  • Maybe You Don't Know ! 如何比较两个引用是否指向同一个对象?

    Person p1, p2;
    // ...
    Console.WriteLine( p1 == p2 );

    上面的代码用来判断p1和p2是否指向同一个对象,但有某种情况下,我们却不能保证其正确性,那就是当我们不能肯定Person类的定义中是否重载了“==”的时候。也许根据Person的定义,只要两个Person对象的ID属性相等,那么应用“==”就会返回true。

    这个时候,我们应该:

    Object o1 = p1;
    Object o2 = p2;
    Console.WriteLine( o1 == o2 );

    Yes,当C#编译器发现“==”两边的对象的声明类型是Object(而不论他们的实际对象是什么)时,C#编译器都不会应用多态原则,调用实际类型中定义的“==”,而会将这两个对象(的引用)载入到堆栈,然后执行一个“ceq”指令,比较他们是否指向了同一个对象。

    .NET为了方便我们,提供了一个静态的Object.ReferenceEquals(Object o1, Object o2)来判断参数中的两个引用是否指向同一个对象,它的实现是:

    public static bool ReferenceEquals(object o1, object o2)
    {
    ? return ( o1 == o2 );
    }

    所以,我们上面的那个代码示例可以简单的写成:

    Person p1, p2;
    // ...
    Console.WriteLine( Object.ReferenceEquals( p1, p2 ) );

  • 相关阅读:
    MYSQL 优化指南
    设计模式——依赖倒置原则实例(PHP实现)
    PHP开发笔记
    反射应用
    HMAC-SHA1算法签名及Authorization头认证
    PHP接口和抽象类的区别
    PHP 模板方法模式使用
    RSA JS 加密解密DEMO
    RSA加密解密(PHP Demo)
    【Spark调优】提交job资源参数调优
  • 原文地址:https://www.cnblogs.com/kaneboy/p/2436747.html
Copyright © 2011-2022 走看看