В 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 хороший ответ, приветствия!

  • Получить список различных значений в списке
  • Каковы правила автоматического сброса буфера stdout в C?
  • Контролировать использование сети процесса?
  • Как изменить строку на C или C ++?
  • Вопросы об объекте Entity Framework Context Lifetime
  • Как включить функцию C # 6.0 в Visual Studio 2013?
  • Изображение слишком малое изображение DrawImage
  • Может ли оконная привязка программным образом вращаться, когда монитор поворачивается на портрет?
  • Как избежать дублирования кода, реализующего константные и неконстантные iteratorы?
  • Только для групп Entity Framework
  • Как создать пользовательские дополнительные поля в UserProfile в MVC4
  • Давайте будем гением компьютера.