나는 이것이 C#에서 IComparer를 사용하기위한 표준인지 여부와 관련하여 질문이 있습니다. Person 객체가 세 개인 상황 (P1, P2 및 P3)이 있다고 가정 해보십시오. P1과 P2에서 전달되는 Compare 메서드를 호출하고 결과가 0이라고 가정 해 보겠습니다. 이는 기본적으로 두 사람을 같은 것으로 분류해야 함을 의미합니다. 이제 P2와 P3에서 전달하는 Compare 메서드를 호출하고 그에 대한 결과도 0이라고합니다. 다시 말하지만, 이것은 두 사람이 평등하다는 것을 의미합니다. 논리적으로 말해서, P1과 P3이 같다고 가정 할 수 있습니다. 그러나 누군가를 구현하기로 결정한 경우 Compare 메소드를 구현할 수 있습니다. 이 경우 P1과 P3도 0을 반환하는 방식으로 구현하는 것이 표준입니까?C# IComparer <T> 표준 사용법의 질문
// Assume these are initialized properly
Person p1 = null, p2 = null, p3 = null;
IComparer<Person> comparer = null;
// Compare person 1 to person 2 and result is 0
Debug.Assert(comparer.Compare(p1, p2) == 0);
// Compare person 2 to person 3 and result is 0
Debug.Assert(comparer.Compare(p2, p3) == 0);
// Would this be a fair assumption that person 1 and person 3 would also be 0?
Debug.Assert(comparer.Compare(p1, p3) == 0);
나는 이것을 알고 있지만, 비교 방법은 이행 규칙이 적용되지 않는 방식으로 구현 될 수 있습니다. Compare 메서드는 새로운 Random()을 반환 할 수 있습니다. 다음(); 전이 규칙은 적용되지 않습니다.그래서 규칙이 적용되는 곳에서 Compare 메소드를 구현하는 표준인지 여부를 묻습니다. – Nick
인터페이스의 적절한 작동을 위해 준수해야하는 계약이 될만큼 충분히 강 대한 대회입니다. 정의되지 않은 행동을하면 계약을 따르지 않습니다 :) – user7116
정말 재밌 네요. 그것은 메소드를 만드는 것과 같습니다. getCurrentTime() {return Time (Random()); }. 그것은 단지 의미가 없습니다. 비교 메소드는 유한하고 항상 동일한 동작을 가져야합니다. 귀하의 예에서 그것은 a.Compare (b) cound가 3 번 연속적으로 호출되면 3 가지 결과를 반환한다는 것을 의미합니다. 나는 이것이 그것이이 기능을위한 것이라고 생각하지 않는다. – Sauleil