В C # в какой категории двоеточие «:» попадает и что это значит?

Я пытался получить ссылку на веб-сайте Microsoft Developer о том, что функция: на самом деле, но я не могу найти ее, потому что кажется, что это не ключевое слово или оператор, а какова функция двоеточия в C #? Также я видел, как это применяется к методу, как эта функция работает ?.

Колонии используются в семи принципиально разных местах (о которых я могу думать с помощью всех в комментариях):

  • Разделение имени classа из его реализаций базового classа / интерфейса в определениях classов или в общих определениях ограничений

     public class Foo : Bar { } public class Foo where T : Bar { } public void Foo() where T : Bar { } 
  • Указание вызова другого конструктора в текущем classе или конструкторе базового classа до текущего конструктора

     public Foo() : base() { } public Foo(int bar) : this() { } 
  • Задание глобального пространства имен (как указывает С. Ланг , это спецификатор псевдонима пространства имен )

     global::System.Console 
  • Указание целей атрибута

     [assembly: AssemblyVersion("1.0.0.0")] 
  • Указание имен параметров

     Console.WriteLine(value: "Foo"); 
  • Как часть тройного выражения

     var result = foo ? bar : baz; 
  • Как часть case или метки goto

     switch(foo) { case bar: break; } goto Bar; Foo: return true; Bar: return false; 
  • Поскольку C # 6 для форматирования в интерполированных строках

     Console.WriteLine($"{DateTime.Now:yyyyMMdd}"); 

Во всех этих случаях двоеточие не используется как оператор или ключевое слово (за исключением : :: . Он относится к категории простых синтаксических символов, таких как [] или {} . Они просто там, чтобы компилятор точно знал, что означают другие символы вокруг них.

Ответ от pswg – это в значительной степени то, что я собираюсь придумать (сбросил мой проект, когда увидел его сообщение), и это должен быть принятый ответ.

Но я не согласен с тем, что ограничение общего типа – это одно и то же использование : как указание наследования.

Вот пример:

 public MyClass : IMyClass where T : IEnumerable { public DoSomething(TT foo) where TT : INotifyPropertyChanged { // ... } } 

Параметр : между MyClass и IMyClass указывает наследование. Между : where T и IEnumerable указывает ограничение типа. Ограничения типа могут применяться к методам, а не к наследованию. Эти две концепции не имеют ничего общего.

@pswg хороший ответ, приветствия!

  • Диктофон
  • Прямое кастинг против «как» оператора?
  • Единичное тестирование частных методов в C #
  • Разница между char * и char
  • В чем разница между «защищенными» и «защищенными внутренними»?
  • Создание нескольких исполняемых файлов с аналогичными правилами
  • нет соответствия для «operator <<» в 'std :: operator
  • Как отключить некоторые даты в элементе управления DateTimePicker?
  • Скрытые особенности C #?
  • Вызов библиотеки C ++ в C #
  • UIButton: как центрировать изображение и текст с помощью imageEdgeInsets и titleEdgeInsets?
  • Давайте будем гением компьютера.