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# 利用Aspose.Words.dll将 Word 转成PDF

    下面是详细的攻略: 准备工作 在官网 Aspose.Words for .NET 下载最新版的 Aspose.Words for .NET。 创建一个 C# 控制台应用程序,导入 Aspose.Words.dll。 using Aspose.Words; 代码实现 使用 Aspose.Words 加载 Word 文件。在加载过程中,Aspose.Words会…

    C# 2023年5月31日
    00
  • asp.net core 2.0 webapi集成signalr(实例讲解)

    ASP.NET Core 2.0 WebAPI 集成 SignalR 是一种常见的实现实时通信的方式。以下是 ASP.NET Core 2.0 WebAPI 集成 SignalR 的完整攻略: 步骤一:创建 ASP.NET Core 2.0 WebAPI 应用程序 首先,需要创建一个 ASP.NET Core 2.0 WebAPI 应用程序。可以使用以下命令…

    C# 2023年5月17日
    00
  • 一步步教你如何创建第一个C#项目

    一步步教你如何创建第一个C#项目 在本篇攻略中,我们将一步步地创建一个C#控制台程序。这个项目的功能是输出一个简单的问候语句。接下来我们将逐一介绍。 步骤一:打开Visual Studio 首先,你需要打开Visual Studio。可以在Windows操作系统中通过点击Windows菜单键,输入“Visual Studio”进行搜索并进入该程序;或者通过桌…

    C# 2023年6月6日
    00
  • 快速了解c# 常量

    下面是“快速了解c#常量”的完整攻略。 1. 什么是C#常量 C#中的常量,也称为不变量,它是指程序运行过程中不会发生改变的固定值。常量在定义后就不允许改变,因此可以提高代码的安全性和稳定性。在C#中,我们可以通过使用const和readonly关键字来定义常量。 2. 使用const关键字定义常量 const关键字用于定义在编译时确定的常量。定义常量时,必…

    C# 2023年6月7日
    00
  • jQuery+Asp.Net实现省市二级联动功能的方法

    下面是关于“jQuery+Asp.Net实现省市二级联动功能的方法”的完整攻略: 一、前置知识 在实现该功能前,你需要具备以下前置知识: HTML、CSS基本语法 jQuery基本用法 Asp.Net基本知识 二、具体实现步骤 1. 在HTML页面中添加表单元素 首先,在HTML页面中添加两个下拉框,分别用来显示“省份”和“城市”。HTML代码如下: &lt…

    C# 2023年5月31日
    00
  • C#多线程之线程控制详解

    C#多线程之线程控制详解 在C#中,多线程技术通常用于对计算密集型和I/O密集型任务进行并发处理,以提高程序的性能和响应时间。C#提供了一系列的线程控制相关的基础类和方法,开发者可以通过这些类和方法灵活地控制线程的创建、启动、暂停、终止等行为。本文将详细讲解C#多线程之线程控制的相关知识点,包括线程同步、线程池、任务取消等内容。 线程同步 在多线程并发场景下…

    C# 2023年6月6日
    00
  • Powershell小技巧之非相同域或信任域也能远程

    Powershell小技巧之非相同域或信任域也能远程 在使用Powershell远程管理计算机时,如果计算机不在相同的域或信任域中,可能会遇到一些问题。本文将介绍如何使用Powershell远程管理非相同域或信任域中的计算机。 步骤1:使用Powershell的New-PSSession命令 首先,我们需要使用Powershell的New-PSSession…

    C# 2023年5月15日
    00
  • .NET Core部署到linux(CentOS)最全解决方案,常规篇

    本文为大家介绍使用 .NET Core部署到Linux服务器的方法,通过本文你将了解到Linux在虚拟机下的安装、Xshell,Xftp的使用方法、git在linux下的交互使用以及.net core在linux下的发布与运行全过程,本文皆在总结了一些经验与笔记在部署过程中遇到的一些问题,同时分享给大家,供大家参考,欢迎讨论交流。 1、Linux操作系统、X…

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