Este artículo fue analizado por nuestros especialistas para garantizar la exactitud de nuestra esta reseña.
Solución:
Valor frente a tipos de referencia
Variables en C # están en 1 de 2 grupos. Valor tipos o Referencia tipos. Tipos como int
y DateTime
están valor tipos. Por el contrario, cualquier clase que cree es una referencia escribe. Las cadenas de C # también son un referencia escribe. La mayoría de las cosas en el marco .NET son referencia tipos.
Partes de una variable
Ahí está la variable nombre y es valor. Dos partes.
La variable nombre es lo que tu declarar será. los valor es lo que tu asignar lo.
Las variables se inicializan
A todas las variables se les da siempre un inicial valor en el punto en que la variable es declarado. Por tanto, todas las variables son inicializado.
Para valor tipos, como int
el compilador les dará un valor válido si no lo hace explícitamente. int
‘s inicializar a cero por defecto, DateTime
‘s inicializar para DateTime.MinValue
por defecto.
Referencia tipo de variables inicializar al objeto que le das. El compilador no asignar un objeto (es decir, un valor válido) si no lo hace. En este caso el valor es null
– nada. Entonces decimos que la referencia es inicializado para null.
Se crean instancias de objetos
Los humanos nacen. Se crean instancias de los objetos. Un bebe es un ejemplo de un humano, un objeto es un ejemplo de alguna clase.
El acto de crear un ejemplo de una clase se llama instanciación (¡Ta-Da!)
Entonces declarar, inicializar, y instanciar unirse así
MyClass myClassyReference = new MyClass();
En lo anterior, es incorrecto decir “… creando una instancia de un objeto… “
editar – inspirado en la discusión de comentarios
Están sucediendo tres cosas distintas (arriba) utilizando una terminología distinta y esa terminología no es intercambiable:
- Se declara una variable de referencia:
MyClass myClassyReference
- Se crea una instancia de un objeto (… de / de un determinado clase, implícito) –
new MyClass()
- El objeto se asigna a la variable.
=
.
Reafirmando los hechos:
-
Una variable de tipo de referencia también se denomina simplemente “una referencia”. Una “variable de tipo valor” no es una referencia.
-
Esto: “objectA es una instancia de un objeto” es profundamente incorrecto. Si objectA era “una instancia de objectB”, entonces debe ser que objectA comienza su vida con el tipo de objectB, sea lo que sea, y el estado actual, sea lo que sea. ¿Qué hay de la creación de los objetos D, E y F a medida que cambia el objeto B? ¡No, no! Es el caso conceptual y técnico del “objetoA es una instancia de una Clase”. “Instanciación” e “instancia de” tienen un significado preciso: un objeto obtiene su tipo, definiciones y valores de una Clase.
-
MyClass myClassyReference = null
Generalmente no decimos “la variable está asignada a null”y nunca decimos” la variable hace referencia null”, No. en su lugar decimos” la variable es null”; o” la variable no hace referencia a nada “, o” la referencia es null”
Aplicación práctica:
-
Apunto con el dedo a tu código y digo “esta instancia tiene una propiedad no válida. Quizás por eso falla el ciclo. Tienes que validar los parámetros durante la instanciación”. (es decir, argumentos del constructor).
-
Veo esto en tu código
MyClass myClassyReference; myClassyReference.DoSomething();
“Declaraste la variable pero nunca la asignaste. Es null por lo que no hace referencia a nada. Es por eso que la llamada al método arroja una excepción “.
fin de editar
La insoportable levedad del ser
A tipo de referencia el nombre y el valor de la variable existen de forma independiente. Y me refiero a independiente.
Un instanciado El objeto puede tener o no una referencia a él.
Un instanciado El objeto puede tener muchas referencias a él.
A declarado la referencia puede ser o no apuntando a un objeto.
A variable se inicializa con un valor. Un objeto se crea una instancia cuando se le asigna memoria y se ha ejecutado su constructor.
Por ejemplo, aquí hay una variable:
Dim obj as Object
Esta variable no ha sido inicializado. Una vez que asigno un valor al obj
variable, la variable se inicializará. A continuación, se muestran ejemplos de inicialización:
obj = 1
obj = "foo"
La creación de instancias es una cosa muy diferente, pero está relacionada, ya que la creación de instancias suele ir seguida de la inicialización:
Dim obj As New Object()
En la línea anterior de código, el obj
variable es inicializado con la referencia a la nueva Object
eso fue instanciado. Decimos que el nuevo Object
se creó una instancia porque hemos creado una nueva instancia de él.
Ahora creo que VB.NET hace que esto sea mucho más confuso que C # porque no está claro que se esté realizando una asignación en el código anterior. En C #, es mucho más claro que hay una instanciación de una instancia y una inicialización de una variable:
Object obj = new Object();
Para inicializar algo es ponerlo en su valor inicial. Para instanciar algo es crear una instancia de ello.
A menudo, esto es más o menos lo mismo. Esta:
SqlConnection conn = new SqlConnection();
instancia a SqlConnection
objeto, y inicializa los conn
variable configurándola en esa instancia.
Dado que el constructor de un objeto también establece las propiedades del objeto en sus valores predeterminados, a menudo es correcto decir que la instanciación de un objeto lo inicializa. (Engañoso, si el objeto expone un método al que debe llamar explícitamente para inicializarlo después de crear una instancia, como ocurre a veces).
Sección de Reseñas y Valoraciones
Recuerda dar visibilidad a esta noticia si te valió la pena.