In C# what category does the colon " : " fall into, and what does it really mean?
Solution 1:
Colons are used in a dozen fundamentally different places (that I can think of, with the help of everyone in the comments):
-
Separating a class name from its base class / interface implementations in class definitions
public class Foo : Bar { }
-
Specifying a generic type constraint on a generic class or method
public class Foo<T> where T : Bar { } public void Foo<T>() where T : Bar { }
-
Indicating how to call another constructor on the current class or a base class's constructor prior to the current constructor
public Foo() : base() { } public Foo(int bar) : this() { }
-
Specifying the global namespace (as C. Lang points out, this is the namespace alias qualifier)
global::System.Console
-
Specifying attribute targets
[assembly: AssemblyVersion("1.0.0.0")]
-
Specifying parameter names
Console.WriteLine(value: "Foo");
-
As part of a ternary expression
var result = foo ? bar : baz;
-
As part of a
case
orgoto
labelswitch(foo) { case bar: break; } goto Bar; Foo: return true; Bar: return false;
-
Since C# 6, for formatting in interpolated strings
Console.WriteLine($"{DateTime.Now:yyyyMMdd}");
-
Since C# 7, in tuple element names
var foo = (bar: "a", baz: "b"); Console.WriteLine(foo.bar);
In all these cases, the colon is not used as an operator or a keyword (with the exception of ::
). It falls into the category of simple syntactic symbols, like []
or {}
. They are just there to let the compiler know exactly what the other symbols around them mean.