C#에서는 모든 개체가 Object에서 상속되므로 모든 개체에 대해 동일성을 테스트 할 수 있습니다.
그저 잘못되었습니다. 모든 클래스가 Equals
메서드를 상속하는 것은 사실이지만이 메서드는 재정의 된 경우를 제외하고는 의미있는 작업을 수행하지 않습니다.
당신은 C에서 같은를 얻을 수 ++ 그러나 당신이 원하는 것을 아마 매우 나쁜 관행이고 :
template <typename A, typename B>
bool equals(A const& a, B const& b) {
return reinterpret_cast<char const*>(&a) == reinterpret_cast<char const*>(&b);
}
...이 (참조 정체성 1을 구현하는) 당신의 대체 케이스가 될 것입니다. 종류는 (SFINAE를 통해) 해당 조작을 구현하는 경우 지금 당신은 하나를 추가 할 수 있습니다
그러나
template <typename T>
auto equals(T const& a, T const& b) -> decltype(a == b) {
return a == b;
}
이 반복하는,이 권고되지도 일반적으로 도움이되지도. 그것은 거의 무의미합니다. 여러분은 이미 여러분의 객체를 비교할 수 있다는 것을 이미 알고 있습니다. 또는 비교가 시작하는 것이 타당하지 않습니다.
C#의 디자인이 상당히 나쁜 것입니다. 단순히 일반적인 "평등"개념이 없으며 C#의 Object
유형이이 점에 대해 지나치게 지정됩니다. struct
들에 대한
1 은 C#을 (가 반사를 사용하고 있기 때문에) 부팅 매우 비효율적 틀림없이 더 의미가 있지만, 마찬가지로 일반적으로 원했던하지 무엇을하고 memberwise 평등을 구현합니다.
코드 게시 : – Drax
평등이란 무엇을 의미합니까? 평등이란 무엇을 의미하는지 정의하는 몇 가지 방법이 있습니다. IMHO는 'C++'에서 임의의 객체를 비교할 수없는 이유 중 하나입니다. 몇 가지 옵션 : 동일한 객체 (즉, 주소), 비트 동등, 개념적으로 동일 ... –
강력하게 유형이 지정된 언어의 TDD는 일반적으로 테스트를 작성할 때 처리 할 유형을 결정해야합니다. –