Я пытаюсь получить ссылку на веб-сайте Microsoft Developer о том, что функция: действительно, но я не могу ее найти, потому что кажется, что это не ключевое слово или оператор, а какова функция двоеточия в С#? Также я видел, как он применяется к методу, как эта функция работает?.
В С# в какой категории двоеточие ":" попадает и что это значит?
Ответ 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 хороший ответ, приветствия!