2010-08-23 7 views

Respuesta

4

Te planteo la pregunta opuesta: ¿por qué no? Si no fuera por un ancestro común, ¿cómo haría referencia a "algún objeto de cualquier tipo"? A veces eso es necesario. Realmente, sin embargo, la clase System.Object tiene algunos métodos útiles que son útiles en general para cualquier tipo:

  • Equals ayuda a prueba de igualdad
  • GetHashCode ayuda con el rendimiento en colecciones
  • GetType - todos los objetos tienen algún tipo
  • Finalize para apoyar CLR finalización

Debido a que estas cosas son co Mmon a todos los tipos, puede tener código (incluso antes de los genéricos) que operan de manera inteligente en varios tipos.

Con eso dicho, sin embargo, en C# 4.0, han introducido dynamic que es realmente una jerarquía de clase propia. Omite por completo la verificación estática de tipos y no deriva necesariamente de object. MSDN tiene un good article al respecto, y Chris Burrows' blog series también es interesante.

1

Si todo se deriva de una sola clase, puede tener comportamientos que son universales, como "es", "como", ToString() y GetHashCode(). Puede usar estos operadores/métodos en cualquier variable.

También puede pasar todo genéricamente como un 'objeto', que es una forma mucho más agradable que el uso de punteros vacíos.

+1

incluso en el sistema dotnet, algunas clases se derivan de interfaces vacías para el casting, mientras que las operaciones de progeress – dankyy1

0

Sin este comportamiento:

  • Sería casi imposible comparar objetos de diferentes clases utilizando los Iguales() método.
  • No podrá almacenar instancias de su clase en las colecciones estándar (no genéricas).
  • No podrá confiar en la conversión implícita al tipo String.

Además, si no me equivoco, todo el modelo de gestión de memoria de .NET gira en torno al tipo System.Object.

0

En el mundo administrado sacrificas el uso de punteros, pero tienes referencias. Así, mientras que no se puede tener algo como esto:

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

que puede tener esto para los tipos de referencia (y los tipos de valor a través de boxeo, pero eso no es realmente la misma cosa), gracias a la herencia:

object pObj = obj; 

Por supuesto, hay otros beneficios, pero he visto principalmente el uso de object como reemplazo de los indicadores de vacío.

Cuestiones relacionadas