vb.net - variable - ¿Cuál es la diferencia entre "instanciado" e "inicializado"?
variables publicas en visual basic (11)
He estado escuchando estas dos palabras usadas en los tutoriales de Microsoft para VB.NET. ¿Cuál es la diferencia entre estas dos palabras cuando se usa en referencia a las variables?
Valor frente a los tipos de referencia
Las variables en C # están en 1 de 2 grupos. Tipos de valores o tipos de referencia . Los tipos como int
y DateTime
son tipos de valores . Por el contrario, cualquier clase que crees es un tipo de referencia . Las cadenas C # también son un tipo de referencia . La mayoría de las cosas en el marco .NET son tipos de referencia .
Partes de una variable
Existe el nombre de la variable y su valor . Dos partes
El nombre de la variable es lo que declaras que es. El valor es lo que le asigna .
Las variables se inicializan
Todas las variables reciben siempre un valor inicial en el punto en que se declara la variable. Por lo tanto, todas las variables se inicializan .
Para los tipos de valor , como int
el compilador les dará un valor válido si no lo haces explícitamente. int
''s initialize a cero de forma predeterminada, DateTime
inicializa a DateTime.MinValue
de manera predeterminada.
Las variables de tipo de referencia se inicializan al objeto que le asigna. 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 se inicializa a nulo.
Los objetos son instanciados
Los humanos nacen Los objetos son instanciados. Un bebé es una instancia de un Humano, un objeto es una instancia de alguna Clase.
El acto de crear una instancia de una clase se llama instanciación (Ta-Da!)
Así que declarar , inicializar y crear instancias se unen así
MyClass myClassyReference= new MyClass();
En lo anterior, es incorrecto decir "... creando una instancia de un objeto ..."
La insoportable levedad del ser
El nombre y el valor de una variable de tipo de referencia existe independientemente. Y quiero decir independiente.
Un objeto instanciado puede o no tener una referencia a él.
Un objeto instanciado puede tener muchas referencias a él.
Una referencia declarada puede o no estar apuntando a un objeto.
* La instanciación significa crear una instancia para una clase u objeto. Inicializar significa * iniciar el mismo objeto o clase para cualquier propósito. **
Consulte los documentos de Java: https://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html
" Point originOne = new Point (23, 94);
Declaration: The code set in bold are all variable declarations that associate a variable name with an object type.
Instantiation: The new keyword is a Java operator that creates the object.
Initialization: The new operator is followed by a call to a constructor, which initializes the new object."
Crear una instancia significa que se ha creado una instancia del objeto. Iniciado significa que ese mismo objeto ha realizado alguna inicialización.
Cuando crea una instancia de una clase u objeto, está creando una nueva instancia de la misma o asignando memoria para "mantener" una. Inicializar ese objeto sería las instrucciones que se realizan durante la creación de instancias.
La creación de instancias es cuando crea una instancia de una clase. Esa instancia es entonces un objeto, y puede establecer sus propiedades o llamar a métodos (dígale que haga cosas).
La iniciación es cuando configura un conjunto de condiciones iniciales para algo. Ese algo podría ser un objeto, donde le dices que se inicie a sí mismo, o simplemente una variable a la que le asigna un valor.
Un objeto puede inicializar algunas otras cosas, o incluso crear una instancia de otros objetos como parte de su iniciación.
La diferencia es que la ejemplificación es la creación de una cosa que puede hacer cosas; la iniciación es algo que se hace.
La creación de instancias se refiere a la asignación de memoria para crear una instancia de una clase, mientras que la inicialización se refiere a nombrar esa instancia asignando el nombre de la variable a esa instancia.
Ejemplo: SqlConnection conn = new SqlConnection();
Aquí new
es una palabra clave que asigna memoria para una instancia y conn
es un nombre de variable asignado para esa instancia.
Otros han explicado la diferencia, así que no voy a entrar en detalles. Pero hay casos en que la creación de instancias no inicializa adecuadamente un objeto. Cuando crea una instancia de un objeto, también lo inicializa con algunos datos. La clase / tipo tendrá la lógica de inicialización, mientras que la lógica de la creación de instancias se llevará a cabo típicamente con la palabra clave new
(básicamente asignación de memoria, copia de referencia, etc.). Pero la creación de instancias no necesariamente tiene como resultado un estado válido para los objetos, que es cuando podemos decir que el objeto no está inicializado . Aquí hay un ejemplo práctico donde un objeto puede ser instanciado pero no inicializado (lo siento, por ejemplo, en C #).
class P { string name = "Ralf"; }
WriteLine(new P().name); // "Ralf";
WriteLine((FormatterServices.GetUninitializedObject(typeof(P)) as P).name); // null
GetUninitializedObject
no llama al constructor para crear una instancia del objeto allí (sino una magia interna).
También se podría argumentar que los tipos de valores no se instancian sino que solo se inicializan, ya que no necesitan nueva asignación cuando se hace una new..
pero eso depende de la definición de instanciación propia.
Para inicializar algo es establecerlo a su valor inicial. Para instanciar algo es crear una instancia de él.
A menudo esto es más o menos lo mismo. Esta:
SqlConnection conn = new SqlConnection();
crea una instancia de un objeto SqlConnection
e inicializa la variable conn
configurándola en esa instancia.
Dado que el constructor de un objeto también establece las propiedades del objeto a sus valores predeterminados, a menudo es correcto decir que la instancia de un objeto lo inicializa. (Engañoso, si el objeto expone un método que tiene que llamar explícitamente para inicializarlo después de la instancia, como a veces es el caso).
Podemos verlo de esta manera. Para una línea de código a continuación:
var p = new Person();
La línea anterior se puede leer de la siguiente manera:
- La variable p se ha inicializado como una clase de persona
- La clase de persona ha sido instanciada en la variable p
El tema de referencia o el contexto importa. Cuando hablamos en términos de variable , usamos la palabra inicializar . Cuando hablamos en términos de clase / tipo , usamos la palabra instanciar .
Una variable se inicializa con un valor. Un objeto se crea una instancia cuando la memoria se asigna para él y se ha ejecutado su constructor.
Por ejemplo, aquí hay una variable:
Dim obj as Object
Esta variable no ha sido inicializada . Una vez que asigno un valor a la variable obj
, la variable se inicializará. Aquí hay ejemplos de inicialización:
obj = 1
obj = "foo"
La creación de instancias es algo muy diferente, pero está relacionado ya que la creación de instancias suele ir seguida de la inicialización:
Dim obj As New Object()
En la línea de código anterior, la variable obj
se inicializa con la referencia al nuevo Object
que se instancia . Decimos que el nuevo Object
fue instanciado 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 si se está llevando a cabo una tarea 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();