C# 在C“冒号是什么类别的?”&引用;陷入,这到底意味着什么?

C# 在C“冒号是什么类别的?”&引用;陷入,这到底意味着什么?,c#,C#,我一直试图在微软开发者网站上找到关于:的函数是什么的参考资料,但我找不到它,因为它似乎既不是关键字也不是运算符。那么C#中冒号的函数是什么呢?我还看到它被应用到一个方法中,它是如何工作的?冒号被用在十几个根本不同的地方(我可以想到,在评论中的每个人的帮助下): 在类定义中将类名与其基类/接口实现分离 public class Foo : Bar { } 在泛型类或方法上指定泛型类型约束 public class Foo<T> where T : Bar { } public

我一直试图在微软开发者网站上找到关于:的函数是什么的参考资料,但我找不到它,因为它似乎既不是关键字也不是运算符。那么C#中冒号的函数是什么呢?我还看到它被应用到一个方法中,它是如何工作的?

冒号被用在十几个根本不同的地方(我可以想到,在评论中的每个人的帮助下):

  • 在类定义中将类名与其基类/接口实现分离

    public class Foo : Bar { }
    
  • 在泛型类或方法上指定泛型类型约束

    public class Foo<T> where T : Bar { }
    
    public void Foo<T>() where T : Bar { }
    
  • 指定全局名称空间(正如C.Lang指出的,这是

  • 指定属性目标

    [assembly: AssemblyVersion("1.0.0.0")]
    
  • 指定参数名称

    Console.WriteLine(value: "Foo");
    
  • 作为三元表达式的一部分

    var result = foo ? bar : baz;
    
  • 作为
    案例
    转到
    标签的一部分

    switch(foo) { case bar: break; }
    
    goto Bar;
    Foo: return true;
    Bar: return false;
    
  • 从C#6开始,用于插值字符串中的格式设置

    Console.WriteLine($"{DateTime.Now:yyyyMMdd}");
    
  • 从C#7开始,在元组元素名称中

    var foo = (bar: "a", baz: "b");
    Console.WriteLine(foo.bar);
    

在所有这些情况下,冒号不用作运算符或关键字(除了
)。它属于简单语法符号的范畴,如
[]
{}
。它们只是让编译器确切地知道它们周围的其他符号的含义。

它是表达式/语句的一部分,包括三元运算符和case语句。你具体在问什么?这可能是重复的吗?不重复。这是关于扩展构造函数的问题,而不是
的目的:
这个问题在我看来不是很有用。这就像问“C#中字符'a'的目的是什么”并得到一个“var”,“class”的列表一样,etc@Blorgbeard试图诋毁这个问题就像“角色‘a’的目的是什么”是完全荒谬的。根据公认的答案,
具有非常特定的语义,这取决于许多可能的上下文。泛型类型约束回答了OP对方法的询问
DoSomething(T foo),其中T:IEnumerable
除了调用基构造函数外,还可以使用它调用当前类的构造函数的另一个重载。例如:
public Foo():这个(“作为参数传递的值”){}
@SimonTewsi/retailcoder谢谢,为了完整性,我已经包括了这些替代用法。它们是鬼鬼祟祟的小东西--我忘了我经常用它们。
Console.WriteLine($"{DateTime.Now:yyyyMMdd}");
var foo = (bar: "a", baz: "b");
Console.WriteLine(foo.bar);