2011-06-15 11 views
31

Cómo crear tipos de valores que no aceptan valores de nulos, como int, bool, etc. en C#?Crear tipos que no admiten valores en C#

+1

¿En qué contexto usaría tal cosa? Con eso, quiero decir, ¿qué estás tratando de lograr? Siempre puede verificar nulo al usar objetos creados con sus clases en C#. y es extraño que estés usando el término "tipo". Si agregaste algo de contexto a tu pregunta, sería más fácil encontrar una solución. – stephenbayer

+0

Los tipos de referencia AFAIK no anulables serían posibles si el operador de asignación fuera susceptible de carga. Sin embargo, este no es el caso en C#. La otra captura es 'MyType type;' sería nula al inicio. –

+2

@stephenbayer: los nulos son * malos *. Las comprobaciones nulas de tipo Run-type fundamentalmente no son diferentes de las verificaciones de tipo de tipo run-type. Si le doy una cadena y llama a los métodos, no sabrá si es o no nulable hasta que explote durante el tiempo de ejecución. Algunos idiomas tienen tipos de referencia no anulables; si desea representar un valor nulo, use un tipo de datos diferente (equivalente a la 'opción 'que se encuentra en muchos idiomas), por lo que se comunica y exige la verificación nula a través del sistema de tipos en tiempo de compilación. Ver http://stackoverflow.com/questions/641328/about-the-non-nullable-types-debate/1451909#1451909. – Juliet

Respuesta

42

Sí, estos se llaman struct.

Las estructuras son tipos de valores, al igual que int, bool y otros.

tienen algunas reglas/recomendaciones relacionadas con ellos: (creo que estos son los más importantes)

  • una estructura se pasa y se asigna por valor, cuando no se utiliza ref o palabras clave fuera .. Esto significa que todo lo que coloque dentro de una estructura se copiará cuando lo asigne o lo pase a un método. Es por eso que no deberías hacer grandes estructuras.

  • no se puede definir un constructor sin parámetros de una estructura en C#

  • estructuras son mejores que son inmutables, y no tienen los emisores de propiedad. Puedes meterte en verdaderos problemas haciendo estructuras mutables.

Se pueden encontrar otras reglas en los documentos de Microsoft sobre structs.

En cuanto a tipos de referencia no anulables ... esto es no es posible. Debe verificar nulos dentro de su código, manualmente.

10

Se puede definir una struct:

Un tipo struct es un tipo de valor que se utiliza normalmente para encapsular pequeños grupos de variables relacionadas, tales como las coordenadas de un rectángulo o las características de un elemento en una inventario. El siguiente ejemplo muestra una estructura simple declaración:

public struct Book 
{ 
    public decimal price; 
    public string title; 
    public string author; 
} 

Sin embargo, no se puede definir alias como int para System.Int32 y que tenga que consultar con el nombre completo MyNamespace.Book (o Book con using MyNamespace;) a su estructura.

Cuestiones relacionadas