Veo que algún código devolverá el valor predeterminado, entonces me pregunto si una clase definida por el usuario, ¿cómo definirá el compilador su valor predeterminado?Valor predeterminado para la clase definida por el usuario en C#
Respuesta
a sonar con el resto, será null
, pero también hay que añadir que se puede obtener el valor por defecto de cualquier tipo, utilizando default
default(MyClass) // null
default(int) // 0
Puede ser especialmente útil cuando se trabaja con los genéricos ; Es posible que desee devolver default(T)
, si su tipo de devolución es T
y no desea suponer que es anulable.
+1 Hay una explicación completa de la palabra clave predeterminada en http://msdn.microsoft.com/en-us/library/xwth0h0d%28VS.80%29.aspx –
El valor por defecto para class
es una null
Si se trata de un tipo de referencia, el valor por defecto será null
, si se trata de un tipo de valor, entonces depende.
Assert.IsTrue(default(MyClass) == null);
what ¿El propósito de esto es afirmar? –
Nota: Una DefaultValueAttribute no hará que un miembro se inicialice automáticamente con el valor del atributo. Debe establecer el valor inicial en su código.
Puede decorar sus propiedades con DefaultValueAttribute.
private bool myVal=false;
[DefaultValue(false)]
public bool MyProperty {
get {
return myVal;
}
set {
myVal=value;
}
}
Sé que no se trata de responder a tu pregunta, solo quería añadir esto como información relevante.
Para más información ver http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx
Como dice la página, DefaultValue es algo utilizado por el diseñador visual de VS. Realmente no está relacionado con la inicialización real; es solo una "pista" de cómo debe inicializarse. – Nyerguds
El valor por defecto para las clases se null
. Para las estructuras, el valor predeterminado es el mismo que se obtiene al crear una instancia del constructor sin parámetros predeterminado de la estructura (que por cierto no puede ser anulado). La misma regla se aplica recursivamente a todos los campos contenidos dentro de la clase o estructura.
Si está buscando de algún modo definir un valor predeterminado no nulo para un tipo de referencia, tenga en cuenta que no tendría sentido que un tipo de referencia tenga un valor predeterminado. En algún punto, una referencia necesitaría apuntar a la memoria asignada para el objeto construido. Para que sea posible, imagino dos implementaciones:
definir una instancia estática como predeterminado: esto podría funcionar, pero requeriría probablemente una manera muy torpe para identificar de alguna manera al compilador dónde obtener la instancia estática. No es realmente una característica que valga la pena poner en el lenguaje.
Permitir llamar al constructor predeterminado cada vez que aparece el valor predeterminado en una expresión: esto sería terrible porque ahora tiene que preocuparse de que dos valores predeterminados sean desiguales porque no anuló Igual a no comparar referencias, y también es terrible debido a la administración de la memoria y al rendimiento de la asignación de memoria, y los efectos secundarios del constructor.
Así que, en resumen, creo que es una función de idioma que realmente no queremos. Y por defecto (MyClass) siempre será == nulo.
Me gustaría hacer esta instancia de clase "por defecto" un campo en lugar de la propiedad, como la forma System.String.Empty
Apariencia:
public class Person
{
public string Name { get; set; }
public string Address { get; set; }
public static readonly Person Default = new Person()
{
Name = "Some Name",
Address = "Some Address"
};
}
...
public static void Main(string[] args)
{
string address = String.Empty;
Person person = Person.Default;
//the rest of your code
}
- 1. definida por el usuario operador de conversión de clase base
- 2. Cuál es el valor predeterminado para miembros de clase C++
- 3. Valor predeterminado para bool en C++
- 4. C valor predeterminado constructor # Clase pregunta
- 5. Python: Excepción definida por el usuario que confirma la regla
- 6. MySQL variable definida por el usuario en la cláusula WHERE
- 7. Volver a registrar clase de ventana definida por el usuario - C++
- 8. SET variable definida por el usuario en mysql return null?
- 9. JSTL - Usar forEach para iterar sobre una clase definida por el usuario
- 10. ¿Cada clase definida por el usuario necesita implementar una interfaz IDisposable para obtener basura recolectada?
- 11. Valor predeterminado para el usuario ForeignKey con administrador de Django
- 12. Valor predeterminado para bool en C#
- 13. ¿Cómo 'ir a definición' para la función definida por el usuario en Leksah?
- 14. ¿Qué hace que una clase definida por el usuario sea indestructible?
- 15. Seriado de clase definido por el usuario, C++ y msgpack
- 16. C#: ¿Cómo establecer el valor predeterminado para una propiedad en una clase parcial?
- 17. T-SQL ¿Sobrecarga de función definida por el usuario?
- 18. iphone: obtenga una variable definida por el usuario en la configuración de Target por código?
- 19. cómo declarar una distribución definida por el usuario en R
- 20. Llamar a una función definida por el usuario en jQuery
- 21. C++: Con CRTP, clase definida en la clase derivada no es accesible en la clase base
- 22. cómo eliminar un elemento de una lista de clase definida por el usuario?
- 23. Cómo pasar el tipo de tabla definida por el usuario como parámetro almacenado en C#
- 24. Objective-C establece el valor predeterminado para una propiedad
- 25. Hacer una clase definida por el usuario de python ordenable, hashable
- 26. servidor SQL función determinista definida por el usuario
- 27. Error del compilador C#? ¿Por qué no se compila esta conversión implícita definida por el usuario?
- 28. C# unsigned int valor predeterminado
- 29. Generar advertencia de compilación con anotación definida por el usuario
- 30. Función definida por el usuario de SQL Dentro de Seleccionar
Solo para aclarar: todas las clases (incluyendo los que se crean) tome por defecto 'null'. Los tipos de valor numérico se establecerán por defecto en cero y las estructuras se definirán en la implementación (los valores se establecen en el constructor). –
En realidad, las estructuras tienen un constructor predeterminado implícito que no se puede sobrescribir, que es cero por la memoria utilizada por la estructura, por lo que el valor predeterminado sigue siendo el compilador definido, no la implementación definida. –
Distinción importante: _Los miembros de clase_ se inicializan con su valor predeterminado. Las variables de función local no inicializadas solo dan errores de compilación;) – Nyerguds