一、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技术站