2009-05-18 25 views

Respuesta

20

En C# se utilizan estructuras para definir tipos de valores (a diferencia de los tipos de referencia declarados por class es).

En C++, una estructura es lo mismo que una clase con un nivel de accesibilidad predeterminado de public.

Entonces la pregunta debería ser: son estructuras en C# diferentes de las clases en C++ y, sí, son: no se puede derivar de estructuras C#, no se pueden tener funciones virtuales, no se pueden definir constructores predeterminados, no se tiene destructores, etc.

+1

El punto de Martin sobre las estructuras de C# que son tipos de valores es bastante importante para el rendimiento porque tienen que estar en caja y sin caja para algunas operaciones. Lea sobre "boxeo" si debe preocuparse por el rendimiento. – dss539

11

Las estructuras en C# muy diferente de clases, consulte Structs vs Classes para más

Las estructuras en C++ son idénticas a las clases, excepto que los miembros son públicos por defecto. Aparte de eso, una estructura C++ puede hacer todo lo que una clase de C++ puede hacer.

+2

Las estructuras de C# pueden tener constructores; simplemente no pueden tener un constructor * predeterminado *. –

+0

Marc: Descubriste mi error intencional allí, bien hecho. . . PD. Lo arreglé :) –

+0

@Marc: Siempre tienen un constructor predeterminado, no puedes definir el tuyo propio :-) – MartinStettner

0

Sí.

estructuras en C# son el viejo y simple, por valor, tipos de datos (a diferencia de clases que están por referencia y tienen ll las cosas OO)

structs en C++ son igual clase que son públicos por defecto.

0

¿Está tratando de interoperar entre C++ administrado y C#? Si es así, hay extensiones de C++ para permitir esto: vea link

0

Una estructura C# es un código administrado, que será liberado por la basura C# cuando ya nadie se refiera a él. Se llama su destructor cada vez que el recolector de basura decide limpiarlo.

Una estructura de C++ es un objeto no administrado, que debe limpiar usted mismo. Como es predecible, se llama al destructor cuando lo eliminas o queda fuera del alcance.

+0

Las estructuras de C# no son objetos; no están * ellos mismos * sujetos a la recolección de basura (a menos que sean campos de un tipo que * es * basura recolectada, es decir, una clase). Las estructuras de C# no pueden definir un finalizador: "Error 1 Solo los tipos de clases pueden contener destructores" –

+0

Buen punto sobre el finalizador. Pero las estructuras son objetos, creo: "MyStruct es un objeto" devuelve verdadero. Y alguien tiene que liberar la memoria que usa la estructura; el recolector de basura lo hará, si la estructura está en el montón. – Andomar

Cuestiones relacionadas