考虑这个类,它重载了 Person 类的 = 运算符。这适用于 VB.NET:
Public Class Person
Public Sub New(ByVal FirstName As String, ByVal LastName As String)
_FirstName = FirstName
_LastName = LastName
End Sub
Private _LastName As String
Public Property LastName() As String
Get
Return _LastName
End Get
Set(ByVal value As String)
_LastName = value
End Set
End Property
Private _FirstName As String
Public Property FirstName() As String
Get
Return _FirstName
End Get
Set(ByVal value As String)
_FirstName = value
End Set
End Property
Public Shared Operator <>(ByVal Person1 As Person, ByVal Person2 As Person) As Boolean
Return Not (Person1 = Person2)
End Operator
Public Shared Operator =(ByVal Person1 As Person, ByVal Person2 As Person) As Boolean
Return Person1.FirstName = Person2.FirstName AndAlso Person1.LastName = Person2.LastName
End Operator
Public Class Test
Public Sub TestIt()
Dim P1 As New Person("f1", "l1")
Dim P2 As Person = Nothing
Dim IsEqual As Boolean = False
If P1 IsNot Nothing AndAlso P2 IsNot Nothing Then
If P1 = P2 Then
IsEqual = True
End If
End If
End Sub
End Class
End Class
和 C# 中的同一个类:
public Person(string FirstName, string LastName)
{
_FirstName = FirstName;
_LastName = LastName;
}
private string _LastName;
public string LastName
{
get { return _LastName; }
set { _LastName = value; }
}
private string _FirstName;
public string FirstName
{
get { return _FirstName; }
set { _FirstName = value; }
}
public static bool operator !=(Person Person1, Person Person2)
{
return !(Person1 == Person2);
}
public static bool operator ==(Person Person1, Person Person2)
{
return Person1.FirstName == Person2.FirstName && Person1.LastName == Person2.LastName;
}
public class Test
{
public void TestIt()
{
Person P1 = new Person("f1", "l1");
Person P2 = null;
bool IsEqual = false;
if (P1 != null && P2 != null)
{
if (P1 == P2)
{
IsEqual = true;
}
}
}
}
使用 C# 类,我如何在调用重载的 ==
运算符函数之前测试 Person
对象是否为 null
该函数用于测试它是否为 null
。也就是说,是否有与 ==
测试分开的 VB 的 Is Nothing
的等效对应函数?似乎 C# 对两者都使用了 ==
。
我试过 object.IsEqual
;这看起来也不对。
最佳答案
顺便说一句,因为你正在实现 ==
您还应该覆盖 Equals(和 GetHashCode)。
一个简单的方法是实现 IEquatable<Person>
:
public bool Equals(Person other)
{
return other != null &&
FirstName == other.FirstName &&
LastName == other.LastName;
}
然后覆盖等于:
public override bool Equals(object o)
{
var other = o as Person;
return other != null && this.Equals(other);
}
最后==
只是:
public static bool operator ==(Person left, Person right)
{
return object.Equals(left, right);
}
public static bool operator !=(Person left, Person right)
{
return !(left == right);
}
( object.Equals 正确处理 null
个案例。)
关于c# - VB.NET 人员在 C# 中的运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12084212/