c# .net

c# - ¿Todos los tipos en.net heredan de System.Object?



(4)

En lo que respecta a su pregunta, las estructuras heredan implícitamente de ValueType , que a su vez deriva de un objeto.

Aparte de eso, el enlace de Eric Lippert publicado anteriormente es lo que le gustaría leer.

Esta pregunta ya tiene una respuesta aquí:

Esta podría ser una pregunta muy básica, pero estoy un poco confundido al respecto. Si reflejo el código de tipo de valor Int32 / Double / any, veo que son estructuras y se parecen a:

[Serializable, StructLayout(LayoutKind.Sequential), ComVisible(true)] public struct Double : IComparable, IFormattable, IConvertible, IComparable<double>, IEquatable<double> { .... }

Entonces, ¿por qué decimos que todo en .NET se deriva de System.Object. Creo que me estoy perdiendo algún punto crucial aquí.

EDITAR: Lo que más me confunde es que, ¿cómo puede un tipo de valor que es struct heredar de System.Object que es una clase?


Eric Lippert ha cubierto esto en una entrada de blog: No todo se deriva de un objeto (este es el título de la entrada de blog, no la respuesta a esta pregunta . No se confunda).

Sí, todas las struct heredan de System.ValueType que a su vez hereda de System.Object . enum s se declara heredado de System.Enum que hereda de System.ValueType .

Actualizar:

Inherentemente, no hay un problema con un tipo de valor derivado de un tipo de referencia. La herencia es una relación "is-a" entre dos tipos . Sin embargo, para tratar un tipo de valor como una instancia de objeto, debe encuadrarse. Esto se hace implícitamente cuando se pasa un valor a un método que espera un parámetro de objeto (o cuando se llama a métodos de instancia implementados en System.Object ).



No todos los tipos, pero System.Double lo hace.

De la publicación de Eric Lippert:

Todos los tipos de valor, incluidos los enumerados y los tipos anulables, se derivan del objeto

En C # la estructura es azúcar sintáctica para System.ValueType, lo que significa que System.Double deriva de System.ValueType. Como System.ValueType deriva de System.Object, System.Double también lo hace. Puede verlo utilizando el código fuente de .Net Framework o utilizando .Net Reflector:

.class public sequential ansi serializable sealed beforefieldinit Double extends System.ValueType

ACTUALIZAR:

En la barra de herramientas, si seleccionas C #, verás (esto es lo que estás viendo): texto alternativo http : //bqqqkg.za.pay.payu.

Si cambias el ComboBox y seleccionas IL, verás: alt text http : //bqqqkg.bay.livefilphotoPy1pRXk-0rDvFjj7b8EqU9-bydzpWjVGJMq8pDbiCr6aALob3j-aC9vvbeBS4vVJbeB4VVJJqqppDbiCr6aALob3j-aC9vvbe

Vea que en IL, Double extiende System.ValueType