[C#] palabra clave predeterminada

descripción general

La palabra clave predeterminada se puede utilizar en los siguientes contextos:

  • Especifica el caso predeterminado en una declaración de cambio.
  • Como operador predeterminado predeterminado o valor predeterminado para los tipos de generación de texto.
  • Como una restricción de tipo predeterminada en una anulación de método genérico o implementación de interfaz explícita.

Especifica el caso predeterminado en una declaración de cambio

DisplayMeasurement(-4);  // Output: Measured value is -4; too low.
DisplayMeasurement(5);  // Output: Measured value is 5.
DisplayMeasurement(30);  // Output: Measured value is 30; too high.
DisplayMeasurement(double.NaN);  // Output: Failed measurement.

void DisplayMeasurement(double measurement)
{
    
    
    switch (measurement)
    {
    
    
        case < 0.0:
            Console.WriteLine($"Measured value is {
      
      measurement}; too low.");
            break;

        case > 15.0:
            Console.WriteLine($"Measured value is {
      
      measurement}; too high.");
            break;

        case double.NaN:
            Console.WriteLine("Failed measurement.");
            break;

        default:
            Console.WriteLine($"Measured value is {
      
      measurement}.");
            break;
    }
}

La función es: si no se cumplen todos los casos, entrará por defecto, si no está escrito, saltará directamente del interruptor

como operador predeterminado predeterminado o tipo de generación de texto predeterminado

tipo valores predeterminados
cualquier tipo de referencia nulo
tipo de valor cero
bool FALSO
enumeración El valor producido por expresión(E)0, donde E es el identificador de enumeración.
estructura Los valores generados se establecen estableciendo todos los campos de tipos de valor en sus valores predeterminados y todos los campos de tipos de referencia en nulos.
un tipo anulable Una instancia donde la propiedad HasValue es falsa y la propiedad Value no está definida.

el valor predeterminado se ha mejorado en C# 7.1, el valor predeterminado (T) ya no es necesario

//变量赋值

C#7.0
var s = "字符串"; 
s = default(string); 
 
C#7.1
var s = "字符串"; 
s = default;

//初始化赋值
C#7.0
var dstring = default(string); 
var dint = default(int); 
var dintNull = default(int?); 
var d = default(dynamic); 
var dt = default(DateTime); 
var dt1 = default(DateTime?);
  
C#7.1
string s = default; 
int i = default; 
DateTime? dt = default; 
dynamic d = default;

//可选参数
C#7.0
void Test(int a, string b = default(string)) 
{
    
    
}
 
C#7.1
void Test(int a, string b = default) 
{
    
    
}

como restricciones de tipo predeterminadas en anulaciones de métodos genéricos o implementaciones de interfaz explícitas

Agregar un tipo de referencia anulable podría crear ambigüedad en el significado de T? para métodos genéricos. Si T es una estructura, T? es lo mismo que System.Nullable. Sin embargo, si T es un tipo de referencia, T? indica que nulo es un valor válido. El motivo de la ambigüedad es que los métodos anulados no pueden contener restricciones. La nueva restricción predeterminada resuelve esta ambigüedad. La restricción se agrega cuando una clase o interfaz base declara dos sobrecargas de un método (una que especifica la restricción de estructura y la otra sin restricción de estructura o clase aplicada):

public abstract class B
{
    
    
    public void M<T>(T? item) where T : struct {
    
     }
    public abstract void M<T>(T? item);

}

Utilice una restricción predeterminada para especificar que una clase derivada invalide un método si no hay ninguna restricción en la clase derivada, o para especificar una implementación de interfaz explícita. Esta práctica solo es válida para métodos o implementaciones de interfaz explícitas que anulan los métodos base:

public class D : B
{
    
    
    // Without the "default" constraint, the compiler tries to override the first method in B
    public override void M<T>(T? item) where T : default {
    
     }
}

fuente

Introducción al uso de la palabra clave predeterminada de C# (expresión de valor predeterminado)
Expresión de valor predeterminado: generar un valor predeterminado

Supongo que te gusta

Origin blog.csdn.net/weixin_44231544/article/details/131658783
Recomendado
Clasificación