[C#] ключевое слово по умолчанию

обзор

Ключевое слово по умолчанию может использоваться в следующих контекстах:

  • Задает регистр по умолчанию в операторе switch.
  • В качестве оператора по умолчанию или значения по умолчанию для типов генерации текста.
  • В качестве ограничения типа по умолчанию для переопределения универсального метода или явной реализации интерфейса.

Задает регистр по умолчанию в операторе switch

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;
    }
}

Функция такова: если все случаи не выполняются, он войдет по умолчанию, если не написано, он сразу выскочит из переключателя

как оператор по умолчанию по умолчанию или тип генерации текста по умолчанию

тип По умолчанию
любой ссылочный тип нулевой
тип значения нуль
логический ЛОЖЬ
перечисление Значение, созданное выражением (E)0, где E — идентификатор перечисления.
структура Сгенерированные значения устанавливаются путем установки всех полей типов значений в их значения по умолчанию и всех полей ссылочных типов в значение null.
обнуляемый тип Экземпляр, в котором свойство HasValue имеет значение false, а свойство Value не определено.

default был улучшен в C# 7.1, default(T) больше не нужен

//变量赋值

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) 
{
    
    
}

как ограничения типа по умолчанию для переопределений универсального метода или явных реализаций интерфейса

Добавление ссылочного типа, допускающего значение NULL, может создать двусмысленность в значении T? для универсальных методов. Если T является структурой, T? совпадает с System.Nullable. Однако, если T является ссылочным типом, T? указывает, что null является допустимым значением. Причина неоднозначности в том, что переопределяющие методы не могут содержать ограничений. Новое ограничение по умолчанию устраняет эту неоднозначность. Ограничение добавляется, когда базовый класс или интерфейс объявляют две перегрузки метода (одна с указанием ограничения структуры, а другая без применения ограничения структуры или класса):

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

}

Используйте ограничение по умолчанию, чтобы указать, что производный класс переопределяет метод, если в производном классе нет ограничений, или чтобы указать явную реализацию интерфейса. Эта практика действительна только для методов или явных реализаций интерфейса, которые переопределяют базовые методы:

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 {
    
     }
}

источник

Знакомство с использованием ключевого слова C# по умолчанию (выражение значения по умолчанию)
Выражение значения по умолчанию — создание значения по умолчанию

Guess you like

Origin blog.csdn.net/weixin_44231544/article/details/131658783