728x90
반응형
728x170
■ IEquatable<T> 인터페이스를 사용하는 방법을 보여준다.
▶ Student.cs
namespace TestProject;
/// <summary>
/// 학생
/// </summary>
public struct Student : IEquatable<Student>
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Public
#region Field
/// <summary>
/// ID
/// </summary>
public int ID;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - Student(id)
/// <summary>
/// 생성자
/// </summary>
/// <param name="id">ID</param>
public Student(int id)
{
ID = id;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region == 연산자 재정의하기 - ==(source1, source2)
/// <summary>
/// == 연산자 재정의하기
/// </summary>
/// <param name="source1">소스 학생 1</param>
/// <param name="source2">소스 학생 2</param>
/// <returns>처리 결과</returns>
public static bool operator ==(Student source1, Student source2)
{
return source1.Equals(source2);
}
#endregion
#region != 연산자 재정의하기 - !=(source1, source2)
/// <summary>
/// != 연산자 재정의하기
/// </summary>
/// <param name="source1">소스 학생 1</param>
/// <param name="source2">소스 학생 2</param>
/// <returns>처리 결과</returns>
public static bool operator !=(Student source1, Student source2)
{
return !source1.Equals(source2);
}
#endregion
////////////////////////////////////////////////////////////////////////////////////////// Instance
//////////////////////////////////////////////////////////////////////////////// Public
#region 해시 코드 구하기 - GetHashCode()
/// <summary>
/// 해시 코드 구하기
/// </summary>
/// <returns>해시 코드</returns>
public override int GetHashCode()
{
return ID;
}
#endregion
#region 동일 여부 구하기 - Equals(source)
/// <summary>
/// 동일 여부 구하기
/// </summary>
/// <param name="source">소스 객체</param>
/// <returns>동일 여부</returns>
public override bool Equals(object source)
{
return source is Student && Equals((Student)source);
}
#endregion
#region 동일 여부 구하기 - Equals(source)
/// <summary>
/// 동일 여부 구하기
/// </summary>
/// <param name="source">소스 학생</param>
/// <returns>동일 여부</returns>
public bool Equals(Student source)
{
return ID == source.ID;
}
#endregion
}
▶ Program.cs
namespace TestProject;
/// <summary>
/// 프로그램
/// </summary>
class Program
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region 프로그램 시작하기 - Main()
/// <summary>
/// 프로그램 시작하기
/// </summary>
private static void Main()
{
Student student1 = new Student(1);
Student student2 = new Student(2);
Student student3 = new Student(1);
Console.WriteLine(student1 == student2);
Console.WriteLine(student1 == student3);
}
#endregion
}
728x90
반응형
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON/.NET6] Marshal 클래스 : AllocHGlobal 정적 메소드를 사용해 비관리 메모리 할당하기 (0) | 2022.10.19 |
---|---|
[C#/COMMON/.NET6] IValidatableObject 인터페이스 : Validate 메소드를 사용해 객체 검증하기 (0) | 2022.10.19 |
[C#/COMMON/.NET6] TimeSpan 구조체 : TotalMilliseconds 속성을 사용해 밀리초 시간 구하기 (0) | 2022.10.19 |
[C#/COMMON/.NET6] DateTimeOffset 구조체 : ToUnixTimeMilliseconds 메소드를 사용해 UNIX 밀리초 시간 구하기 (0) | 2022.10.19 |
[C#/COMMON/.NET6] DateTime 구조체 : 밀리초 시간 구하기 (0) | 2022.10.19 |
[C#/COMMON/.NET6] String 클래스 : PadLeft 메소드를 사용해 반복 문자열 구하기 (0) | 2022.10.18 |
[C#/COMMON/.NET6] StringBuilder 클래스 : Insert 메소드를 사용해 반복 문자열 구하기 (0) | 2022.10.18 |
[C#/COMMON/.NET6] 문자열 반복하기 (0) | 2022.10.18 |
[C#/COMMON/.NET6] String 클래스 : 생성자를 사용해 반복 문자열 구하기 (0) | 2022.10.18 |
[C#/COMMON/.NET6] 자연 정렬하기 (0) | 2022.10.15 |
댓글을 달아 주세요