2010-08-23 3 views

답변

4

나는 당신에게 반대의 질문을 던집니다. 왜 안 되니? 일부 공통 조상이 아니라면 "어떤 유형의 객체"에 대한 참조를 어떻게 가질 수 있습니까? 때로는 그것이 필요합니다. 정말, 그래도 System.Object 클래스는 모든 유형의 일반적으로 유용한 몇 가지 유용한 방법이 있나요 :

  • Equals 평등
  • GetHashCode에 대한 테스트 컬렉션 성능
  • GetType하는 데 도움이 도움이 - 모든 객체는 몇 가지 유형이
  • Finalize 이러한 일들이 공동이기 때문에 CLR의 마무리를

을 지원하는 다양한 유형에 대해 지능적으로 작동하는 코드를 사용할 수 있습니다 (제네릭 이전까지도). 그와

는하지만, C#을 4.0에서, 그들은 정말 자신의 클래스 계층 구조입니다 dynamic을 도입 한 것을. 정적 유형 검사를 생략하고 반드시 object에서 파생되지는 않습니다. MSDN은 good article이며, Chris Burrows' blog series도 흥미 롭습니다. 이 동작없이

1

, 당신은 보편적 행동을 할 수 있습니다. 이러한 연산자/메서드는 모든 변수에서 사용할 수 있습니다.

또한 무효 포인터를 사용하는 것보다 훨씬 더 좋은 방법 인 '객체'로 일반적으로 아무것도 전달할 수 있습니다.

+1

dotnet 시스템에서도 일부 클래스는 캐스팅 목적으로 빈 인터페이스에서 파생됩니다. – dankyy1

0

:

  • 그것은() 메서드 같음을 사용하여 다른 클래스의 객체를 비교하는 것은 거의 불가능하다.
  • 표준 (비 일반) 컬렉션에 클래스 인스턴스를 저장할 수 없게됩니다.
  • String 형식의 암시 적 변환에 의존 할 수 없습니다.

또한 실수하지 않으면 .NET의 전체 메모리 관리 모델이 System.Object 유형을 중심으로 돌아갑니다.

0

관리되는 세계에서 포인터 사용은 희생되지만 참조는 있습니다. 이 같은 것을 가질 수는 없지만 그래서 : 감사 상속을

SomeClass obj = new SomeClass(); 
void* pObj = &obj; 

당신은 참조 유형이있을 수 있습니다 (권투를 통해 값 유형,하지만 그건 정말 같은 일이 아니에요) :

object pObj = obj; 

물론 다른 이점도 있습니다. 그러나 주로 void 포인터 대신에 object을 사용하는 것으로 나타났습니다.

관련 문제