В С# в какой категории двоеточие ":" попадает и что это значит? - программирование
Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

    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;
    
  • Так как С# 6 для форматирования в интерполированных строках

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

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

Ответ 2

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

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

Вот пример:

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

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

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