在C#中,冒号“:”属于什么类别,它究竟意味着什么?
我一直试图在微软开发者网站上获得关于以下function的参考:真的是但我找不到它,因为它似乎既不是关键字也不是操作符,所以C#中冒号的function是什么? 另外我已经看到它被应用于一个方法该如何运作?
冒号在七个根本不同的地方使用(我可以想到,在评论中的每个人的帮助下):
-
在类定义或通用约束定义中将类名与其基类/接口实现分开
public class Foo : Bar { } public class Foo
where T : Bar { } public void Foo () where T : Bar { } -
指示如何在当前类或当前构造函数之前调用基类的构造函数上调用另一个构造函数
public Foo() : base() { } public Foo(int bar) : this() { }
-
指定全局命名空间(如C. Lang所指出的,这是命名空间别名限定符 )
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的答案几乎就是我想要的(当我看到他的post时放弃了我的选秀),这应该是公认的答案。
但我不同意generics类型约束与使用相同的用法:
指定inheritance。
这是一个例子:
public MyClass : IMyClass where T : IEnumerable { public DoSomething(TT foo) where TT : INotifyPropertyChanged { // ... } }
:
MyClass
和IMyClass
指定inheritance。 :
where T
和IEnumerable
之间指定类型约束。 类型约束可以应用于方法,而不是inheritance。 这两个概念没有任何共同之处。
@pswg不错的回答,欢呼!