¿Qué es la clase en C#?
1. La clase es un tipo de referencia y las estructuras son un tipo de valor.
Dado que la clase es un tipo de referencia, la clase se puede establecer como nula. Pero no podemos establecer la estructura en nulo porque es un tipo de valor.
estructura AStruct
{
int aField;
}
clase AClase
{
int aField;
}
clase MainClass
{
public static void Main()
{
AClass b = null; // Sin error.
AStruct s = null // Error [No se puede convertir nulo a 'AStruct' porque es un tipo de valor ].
}
}
2. Cuando crea una instancia de una clase, se creará en el montón. Y cuando crea una instancia de una estructura, se creará en la pila
3. Utiliza una referencia a una instancia de clase. Y no estás utilizando una referencia a una estructura. (En su lugar, úselos directamente)
4. Cuando pasamos una clase como parámetro a un método, le pasamos una referencia. struct pasa valores en lugar de referencias.
5. Las estructuras no pueden tener inicializadores, pero las clases pueden tener inicializadores.
clase MiClase
{
int myVar =10; // sin error de sintaxis
public void MyFun( )
{ // declaraciones }
}
struct MyStruct
{
int myVar = 10 // error de sintaxis;
public void MyFun( )
{// declaraciones }
}
6. Las clases pueden tener un dispositivo de construcción obvio sin parámetros. pero Struct no puede
class MyClass
{
int myVar = 10;
public MyClass() // sin error de sintaxis <. /p>
{
// declaraciones
}
}
estructura MyStruct
{
int myVar;
public MyStruct( ) // error de sintaxis.
{
// declaraciones
}
}
7. Se debe crear una instancia de la nueva palabra clave antes de usar la clase. Struct no la necesita.
MyClass aClassObj; = new MyClass(); es el formato correcto.aClassObj.
myVar=100;//NullReferenceException(porque aClassObj no contiene una referencia a un objeto de tipo myClass).
MyStruct aStructObj;
aStructObj.myVar=100; // sin excepción.
8. La clase admite herencia y polimorfismo, pero Struct no. Nota: Sin embargo, Struct puede implementar interfaces como. clases.
9. Dado que Struct no admite herencia, sus miembros no se pueden modificar con protected o Protected Internal
10. El constructor de Class no necesita inicializar todos los campos. el constructor de Struct debe inicializar todos los campos. Field
class MyClass //Sin error (No importa si el campo 'MyClass.myString' está inicializado o no).
{ p>
int miInt;
cadena miCadena;
public MiClase( int aInt )
{ miInt = aInt; >}
struct MyStruct // Error (el campo ' MyStruct.myString ' debe estar completamente asignado antes de salir del constructor).
{
int myInt;
string myString;
public MyStruct( int aInt )
{
myInt = aInt
}
}
11. Class puede definir destructores, pero Struct no.
12 Class es más adecuada para datos grandes y complejos, mientras que Struct es adecuada para As. un nuevo tipo compuesto por algunas combinaciones de datos de uso frecuente.
Ocasiones aplicables: Struct tiene ventajas de rendimiento y Class tiene ventajas de extensión orientada a objetos.
El tipo utilizado para el almacenamiento de datos subyacente está diseñado como tipo Struct y el tipo utilizado para definir el comportamiento de la aplicación está diseñado como Class. Si la aplicación futura del tipo es incierta, se debe utilizar Clase.