C# 覆写操作符=
时间: 2023-07-12 20:09:53 浏览: 161
在C#中,要覆写操作符=,需要使用关键字operator和重载的运算符。在类中定义一个方法,参数类型为该类的两个对象,返回值为bool类型,方法名称为operator==。该方法用于比较两个对象是否相等。示例代码如下:
```
public static bool operator ==(ClassName obj1, ClassName obj2)
{
if (Object.ReferenceEquals(obj1, null))
{
return Object.ReferenceEquals(obj2, null);
}
return obj1.Equals(obj2);
}
```
需要注意的是,覆写操作符=时,还需要同时覆写操作符!=,否则在使用!=操作符时会出现编译错误。可以通过以下方法覆写操作符!=:
```
public static bool operator !=(ClassName obj1, ClassName obj2)
{
return !(obj1 == obj2);
}
```
相关问题
C# 覆写操作符= 实例代码
虽然 C# 中不支持直接重载 `=` 赋值操作符,但是我们可以通过实现 `IEquatable<T>` 接口和 `Clone` 方法来实现类的赋值操作。下面是一个例子:
```csharp
using System;
public class Person : IEquatable<Person>, ICloneable
{
public string Name { get; set; }
public int Age { get; set; }
public bool Equals(Person other)
{
if (other == null) return false;
return (this.Name.Equals(other.Name) && this.Age == other.Age);
}
public override bool Equals(object obj)
{
if (obj == null) return false;
Person personObj = obj as Person;
if (personObj == null) return false;
else return Equals(personObj);
}
public override int GetHashCode()
{
return this.Name.GetHashCode() ^ this.Age.GetHashCode();
}
public object Clone()
{
return new Person { Name = this.Name, Age = this.Age };
}
public static bool operator ==(Person person1, Person person2)
{
if (((object)person1) == null || ((object)person2) == null)
return Object.Equals(person1, person2);
return person1.Equals(person2);
}
public static bool operator !=(Person person1, Person person2)
{
if (((object)person1) == null || ((object)person2) == null)
return !Object.Equals(person1, person2);
return !(person1.Equals(person2));
}
}
```
在这个例子中,我们重载了 `==` 和 `!=` 运算符来比较两个 `Person` 对象是否相等。我们也实现了 `IEquatable<T>` 接口和 `Equals` 方法来比较两个 `Person` 对象是否相等。还实现了 `ICloneable` 接口和 `Clone` 方法来实现对象的克隆。这样,我们就可以在需要时使用 `=` 赋值操作符进行类的赋值操作了。例如:
```csharp
Person person1 = new Person { Name = "Tom", Age = 20 };
Person person2 = new Person { Name = "Tom", Age = 20 };
Person person3 = person1.Clone() as Person;
Console.WriteLine(person1 == person2); // true
Console.WriteLine(person1 == person3); // true
person1.Age = 30;
Console.WriteLine(person1.Age); // 30
Console.WriteLine(person3.Age); // 20
person3 = person1;
Console.WriteLine(person1 == person3); // true
```
阅读全文