IEquatable <T>
해당 인터페이스는 같음을 비교하는 인터페이스로
.Equls(Object)의 형태로 동등한지 비교하는 메소드이다.
반응형
비교하는 과정에서 Value Type의 값이 들어가면 Boxing 현상이 이뤄진다고 한다.
IEquatable Generic Type으로 정의하고 난 이후에 필요한 타입에 따라 대응하면 해상 상황(Boxing- UnBoxing)을 피할수 있다.
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
public class Person : IEquatable<Person>
{
private string uniqueSsn;
private string lName;
public Person(string lastName, string ssn)
{
if (Regex.IsMatch(ssn, @"\d{9}"))
uniqueSsn = $"{ssn.Substring(0, 3)}-{ssn.Substring(3, 2)}-{ssn.Substring(5, 4)}";
else if (Regex.IsMatch(ssn, @"\d{3}-\d{2}-\d{4}"))
uniqueSsn = ssn;
else
throw new FormatException("The social security number has an invalid format.");
this.LastName = lastName;
}
public string SSN
{
get { return this.uniqueSsn; }
}
public string LastName
{
get { return this.lName; }
set {
if (String.IsNullOrEmpty(value))
throw new ArgumentException("The last name cannot be null or empty.");
else
this.lName = value;
}
}
public bool Equals(Person other)
{
if (other == null)
return false;
if (this.uniqueSsn == other.uniqueSsn)
return true;
else
return false;
}
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.SSN.GetHashCode();
}
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));
}
}
Microsoft IEquatable <T> 인터페이스 : [링크]
iEquatable 예시 코드 : [링크]
★☆☆☆☆
반응형
'개발 > 기본) 기본기' 카테고리의 다른 글
기본기).Net) Warning 무시(코드 분석 경고 표시하지 않음) (0) | 2022.12.01 |
---|---|
C#)DateTime Format (0) | 2022.10.23 |
기본기) URL Append (Custome URL Scheme) (0) | 2022.07.25 |
기본기) Custom Exception (사용자 정의 예외) (0) | 2022.07.04 |
기본기) Null을 효과적으로 처리하기 위한 팁 (0) | 2022.05.31 |
댓글