В C # в какой категории двоеточие «:» попадает и что это значит?
Я пытался получить ссылку на веб-сайте Microsoft Developer о том, что функция: на самом деле, но я не могу найти ее, потому что кажется, что это не ключевое слово или оператор, а какова функция двоеточия в C #? Также я видел, как это применяется к методу, как эта функция работает ?.
- Ли вектор :: erase () на векторе указателей объектов уничтожает сам объект?
- C # WebBrowser Control - отправка формы не работает с помощью InvokeMember («Click»)
- Не уникальные значения enums
- Можем ли мы перегружать операторы для встроенных типов, таких как int или float?
- Рекомендации по управлению исключениями в Java или C #
- Как я могу подписать файл с помощью RSA и SHA256 с .NET?
- Скобки, окружающие возвращаемые значения
- Как перечислить перечисление?
Колонии используются в семи принципиально разных местах (о которых я могу думать с помощью всех в комментариях):
-
Разделение имени 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 хороший ответ, приветствия!