/ / ¿Cómo se compila esto? c # - c #, compilación

¿Cómo se compila esto? c # - c #, compilación

object obj = new object[] { new object(), new object() };

¿Cómo se compila esto? Parece confuso.

Parece que debería ser

object[] obj = new object[] { new object(), new object() };

o

object[] obj = { new object(), new object() };

Respuestas

3 para la respuesta № 1

Se compila porque un "objeto" puede ser cualquier cosa, por lo tanto, puede ser una referencia a una matriz de objetos. El código a continuación que usa cadenas para hacer la distinción un poco más clara, podría ayudar. Asi que:

List<string> myStrings = new List<string>() { "aa", "bb" };
// Now we have an array of strings, albeit an empty one
string[] myStringsArray = myStrings.ToArray();
// Still a reference to myStringsArray, just held in the form of an object
object stillMyStringsArray = (object)myStringsArray;

// Get another array of strings and hold in the form of an object
string[] anotherArray = myStrings.ToArray();
object anotherArrayAsObject = (object)anotherArray;

// Store both our objects in an array of object, in the form of an object
object myStringArrays = new object[] { stillMyStringsArray, anotherArrayAsObject };

// Convert myStringArrays object back to an array of object and take the first item in the array
object myOriginalStringsArrayAsObject = ((object[])myStringArrays)[0];
// Conver that first array item back into an array of strings
string[] myOriginalStringsArray = (string[])myOriginalStringsArrayAsObject;

Esencialmente, un objeto siempre puede ser una referencia.a cualquier cosa, incluso una matriz de objeto. Al objeto no le importa lo que se coloque en él, por lo que al final del código, tenemos una matriz de cadenas de vuelta. Ejecute ese código en Visual Studio, suelte algunos puntos de interrupción y cámbielo. Esperamos que le ayude a entender por qué el código que especificó es válido =)


6 para la respuesta № 2

El objeto es la base para todo. Cualquier cosa Se puede asignar a una variable de tipo objeto.


2 para la respuesta № 3

En

object obj = new object[] { ...}

La parte derecha da una referencia de tipo. object[] pero ese tipo, como cualquier otro tipo, es compatible con la asignación de object.


1 para la respuesta № 4

objeto obj = ... aquí puede referirse a una Colección. No se dice que la diferencia de uso de "objeto" aquí se refiere al mismo tipo de objeto.


1 para la respuesta № 5

Una matriz de objetos es un objeto, pero esto es realmente extraño.