C#语言规范:方法与重载详解

需积分: 41 154 下载量 36 浏览量 更新于2024-08-10 收藏 4.46MB PDF 举报
本文档是C#语言规范的5.0版本,主要讲解了C#中的签名和重载概念,特别是在方法、实例构造函数、索引器和运算符中的应用。 在C#中,签名是区分不同成员的关键因素,包括方法、实例构造函数、索引器和运算符。签名由以下几个部分组成: 1. **方法签名**:由方法名、类型形参的数量以及每个形参的类型和传递模式(值、引用或输出)。值得注意的是,签名不包含返回类型和`params`修饰符,也不包含可选类型形参约束。 2. **实例构造函数签名**:仅包含每个形参的类型和传递模式,不包含`params`修饰符。 3. **索引器签名**:仅包含每个形参的类型,不包含元素类型和`params`修饰符。 4. **运算符签名**:由运算符的名称和每个形参的类型组成,不包含结果类型。 如果两个成员的签名在名称、类型形参数量和形参传递模式上相同,并且在类型之间存在标识转换,那么它们被认为是相同的签名。这构成了重载的基础。 - **方法重载**:允许在同一类、结构或接口中声明同名但签名不同的多个方法。 - **实例构造函数重载**:在类或结构中可以声明多个具有不同签名的实例构造函数。 - **索引器重载**:类、结构或接口可以有多个签名唯一的索引器。 - **运算符重载**:类或结构可以声明多个同名但签名唯一的运算符。 签名中的`out`和`ref`参数修饰符被视为签名的一部分,但在同一类型中,不能仅仅通过`ref`和`out`的区别来定义两个不同的方法。如果将带有`out`修饰符的所有形参改为`ref`,导致两个方法的签名相同,将会导致编译错误。 文档还提供了示例,展示了如何在接口`ITest`中重载方法`F`的不同签名,包括无参数、带整型参数、带`int`的`ref`和`out`参数以及带两个整型参数的情况。 C# 5.0语言规范深入探讨了程序结构、类型系统、表达式、语句、类和对象的细节,包括成员的可访问性、类型形参、继承、字段、方法、构造函数、属性、索引器、事件、运算符、析构函数、结构、数组、接口、枚举、委托和特性等主题。这份文档对于深入理解C#编程语言至关重要。