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#通过进程调用cmd判断登录用户权限代码分享

    下面是详细的攻略: 1. 什么是进程调用? 进程调用是指一个程序调用另一个程序的过程。在操作系统中,每个程序都有一个进程 ID(PID),可以用这个 PID 来识别程序。进程调用可以用来执行一些和本程序无关的任务,比如打开新程序、关闭进程、执行命令等。 2. 怎样通过进程调用 cmd? 在 C# 中,可以通过 Process 类来操作进程。Process.S…

    C# 2023年5月15日
    00
  • 可空类型Nullable用法详解

    可空类型Nullable用法详解 概述 C# 提供了可空类型 Nullable<T> 来表示值类型(例如 int、double 等)可以为 null。可空类型的变量将具有两种可能的状态:1)具有值;2)没有值(null)。 int? myNullableInt = null; // 可空类型 int 的变量,赋值为 null(没有值) 可空类型的…

    C# 2023年5月15日
    00
  • 浅析C# 9.0 新特性之 Lambda 弃元参数

    理解你的要求,下面是一份“浅析C# 9.0 新特性之 Lambda 弃元参数”的完整攻略。 Lambda 表达式介绍 Lambda 表达式是一种匿名方法的语法糖,可以快速方便地创建委托和函数式编程风格的代码。 Lambda 表达式可以用于以下几种场景: 作为参数传递给委托; 作为方法返回值返回; 作为 LINQ 查询的查询体部分。 Lambda 表达式的一般…

    C# 2023年5月31日
    00
  • Asp.Net中文本换行

    让我来给您讲解”Asp.Net中文本换行”的完整攻略吧。 1.使用Html的<br>标签 在Asp.Net中,我们可以使用Html的<br>标签来实现文本换行,这个标签可以在Razor视图中或在代码中使用。以下是使用<br>标签的示例: <p> 第一行文本<br> 第二行文本<br> 第…

    C# 2023年6月3日
    00
  • C#实现动态数据绘图graphic的方法示例

    我来详细讲解一下“C#实现动态数据绘图graphic的方法示例”的攻略。 1. 概述 动态数据绘图是指对不断变化的数据进行可视化展示。C#的Graphic类提供了丰富的绘图方法,可以轻松实现动态数据的展示效果。本文将介绍如何使用Graphic类实现动态数据绘图功能。 2. 实现过程 2.1 准备工作 要使用Graphic类进行动态数据绘图,我们首先需要创建一…

    C# 2023年5月31日
    00
  • 基于SqlSugar的开发框架循序渐进介绍(27)– 基于MongoDB的数据库操作整合

    SqlSugar的开发框架本身主要是基于常规关系型数据库设计的框架,支持多种数据库类型的接入,如SqlServer、MySQL、Oracle、PostgreSQL、SQLite等数据库,非关系型数据库的MongoDB数据库也可以作为扩展整合到开发框架里面,通过基类的继承关系很好的封装了相关的基础操作功能,极大的减少相关处理MongoDB的代码,并提供很好的开…

    C# 2023年4月17日
    00
  • Mvc提交表单的四种方法全程详解

    Mvc提交表单的四种方法全程详解 本文将详细讲解 MVC 中提交表单的四种方法,并提供示例说明。四种方法分别为 GET、POST、PUT 和 DELETE。 在开始之前,我们需要了解一下 MVC 的控制器(Controller)和视图(View)。控制器负责接受用户的请求并处理请求,视图负责展示数据。 1. GET 方法 GET 方法通常用于获取数据,比如查…

    C# 2023年5月31日
    00
  • C#简单的通用基础字典实现方法

    下面是关于C#简单的通用基础字典实现方法的完整攻略。 什么是C#字典? C#字典是一种非常有用的数据结构,它允许我们使用一个键对值进行排序,并且可以快速地访问和修改这些值。字典对于许多类型的编程问题都很有用,因为它们可以将数据存储在一个稳定的位置,并使其快速地访问和操作。 如何使用C#字典? 要使用C#字典,我们需要使用C#编程语言中提供的Dictionar…

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