Equals和==的区别 公共变量和属性的区别小结

一、Equals和==的区别

1. 相同点

  • Equals和==都是用于比较两个对象是否相等的方法;
  • 对于基本类型,两者均可使用。

2. 不同点

  • Equals比较的是两个对象的内容是否相等;
  • ==比较的是两个对象的引用是否相等。

示例1:

string str1 = "hello";
string str2 = "hello";
Console.WriteLine(str1 == str2); // true
Console.WriteLine(str1.Equals(str2)); // true

上面代码中,str1和str2都是字符串类型的变量,他们的值都是"hello",所以用==比较和用Equals比较都是true。

示例2:

Person person1 = new Person("张三", 20);
Person person2 = new Person("张三", 20);
Console.WriteLine(person1 == person2); // false
Console.WriteLine(person1.Equals(person2)); // true

上面代码中,person1和person2都是Person类型的对象,他们的姓名和年龄都相同,但是他们是两个不同的对象,所以用==比较是false,用Equals比较是true。

二、公共变量和属性的区别

1. 相同点

  • 公共变量和属性都是用于类的成员之间通讯的;
  • 两者都可以访问和修改对应的变量值。

2. 不同点

  • 公共变量是直接暴露给外部的,而属性可以对外部作出限制、保护底层数据;
  • 属性可以使用计算定值、更新某些字段、执行数据验证等操作。

示例1:

public class Person
{
    public string Name; // 公共变量
    public int Age; // 公共变量
}

Person person = new Person();
person.Name = "张三";
Console.WriteLine(person.Name); // 张三
person.Age = -10;
Console.WriteLine(person.Age); // -10

上面代码中,Person类用公共变量实现了Name和Age的成员,但是Age的值可以被设置为负数,这是不符合需求的。

示例2:

public class Person
{
    private string _name; // 私有变量
    public string Name // 属性
    {
        get { return _name; }
        set 
        {
            if (string.IsNullOrEmpty(value))
                throw new ArgumentException("姓名不可为空!");
            this._name = value;
        }
    }
    private int _age; // 私有变量
    public int Age // 属性
    {
        get { return _age; }
        set 
        {
            if (value < 0 || value > 120)
                throw new ArgumentOutOfRangeException("年龄超出范围!");
            this._age = value;
        }
    }
}

Person person = new Person();
person.Name = " "; // 抛出异常“姓名不可为空!”
person.Age = 200; // 抛出异常“年龄超出范围!”

上面代码中,Person类中使用了属性来实现Name和Age的成员,对于设置Name时输入空字符抛出异常、对于设置Age时设置超出范围数据抛出异常等功能的实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Equals和==的区别 公共变量和属性的区别小结 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • C#画笔Pen用法实例

    下面是关于”C#画笔Pen用法实例”的完整攻略。 什么是C#画笔Pen 在C#中,Pen是一个GDI+中的对象,它用来描述形状轮廓的颜色、宽度、样式和端点等信息。在GDI+绘图中,我们可以使用Pen对象来画线、曲线、矩形、圆和其他图形,也可以设置它们的外观属性,比如颜色、线宽、线型等。 如何创建Pen对象 在C#中,可以使用Pen类定义一个Pen对象。其中,…

    C# 2023年5月31日
    00
  • C#下载歌词文件的同步和异步方法

    下面是关于C#下载歌词文件的同步和异步方法的完整攻略: 1. 同步方法: 1.1 首先,我们需要引入System.Net命名空间下的WebClient类。 WebClient类可以实现简单的HTTP协议,我们可以通过它来下载歌词文件。 1.2 接下来,我们可以使用DownloadFile方法实现下载。 DownloadFile方法有两个参数,第一个参数为待下…

    C# 2023年5月31日
    00
  • c#与WMI使用技巧集第1/2页

    c#与WMI使用技巧集第1/2页是一篇介绍C#与WMI使用技巧的文章,主要包括WMI的基础知识、C#中如何使用WMI等方面的内容。以下是该文章完整攻略的详细讲解: WMI基础知识 WMI(Windows Management Instrumentation)是一种用于管理Windows操作系统的工具,可以用于获取系统信息、监控、配置等。在C#中使用WMI可以…

    C# 2023年6月6日
    00
  • C# Linq的Join()方法 – 将两个序列中的元素联接在一起

    C#中的Linq提供了Join()方法来实现两个数据源之间的连接。Join()方法接受四个参数,可以在连接过程中指定连接的条件以及返回的结果类型等信息。接下来,我将为您提供一个完整的攻略来详细讲解C# Linq的Join()方法。 Join()方法的基本语法 下面是Join()方法的基本语法: var result = from s in source1 j…

    C# 2023年4月19日
    00
  • C#开发微信门户及应用(3) 文本消息和图文消息应答

    这里是对C#开发微信门户及应用(3) 文本消息和图文消息应答的完整攻略: 创建回复消息 当您想要回复微信用户的消息时,需要进行以下步骤: 创建一个ReplyMessage实例。 设置ReplyMessage的ToUserName和FromUserName属性,它们分别代表接收消息的用户ID和公众号ID。 如果您要回复的是一条文本消息,请创建一个TextMes…

    C# 2023年6月1日
    00
  • ASP.NET Core – 缓存之内存缓存(下)

    话接上篇 [ASP.NET Core – 缓存之内存缓存(上)],所以这里的目录从 2.4 开始。 2.4 MemoryCacheEntryOptions MemoryCacheEntryOptions 是内存缓存配置类,可以通过它配置缓存相关的策略。除了上面讲到的过期时间,我们还能够设置下面这些: 设置缓存优先级。 设置在从缓存中逐出条目后调用的 Post…

    C# 2023年4月17日
    00
  • C# DataTable分页处理实例代码

    下面是“C# DataTable分页处理实例代码”的完整攻略: 什么是DataTable分页处理? DataTable是.NET Framework中的一个非常重要的数据对象,它可以用来存储和操作数据。很多时候,我们需要在规模较大的数据集中只提取部分数据进行显示,这时就需要进行分页处理。 如何进行DataTable分页处理? 在C#中,可以通过以下步骤来进行…

    C# 2023年5月31日
    00
  • asp.net中oracle 存储过程(图文)

    下面我将详细讲解“ASP.NET 中 Oracle 存储过程”的完整攻略。 一、背景介绍 在使用ASP.NET框架进行Web应用程序开发的过程中,我们通常需要调用Oracle数据库的存储过程来获取数据或者对数据进行修改操作。而存储过程相比于单纯的SQL语句执行,能更好地提高数据库性能,同时还能提高代码实现的安全性。 因此,掌握ASP.NET中Oracle存储…

    C# 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部