咨询C#泛型partial method两条官方规则的对应代码示例
以下是两条C#分部泛型方法规则对应的代码示例:
规则1:泛型约束仅需在定义声明中指定,实现声明可选择重复
分部方法分为「定义声明」(仅写签名,无方法体)和「实现声明」(带方法体的完整实现)两部分,泛型约束只需要在定义声明中编写,实现部分可以选择重复写,也可以省略。
// 分部类第一部分:存放分部方法的定义声明 public partial class TestClass { // 定义声明处指定泛型约束:T必须实现IDisposable接口 partial void Execute<T>(T param) where T : IDisposable; }
合法写法1:实现时省略约束
// 分部类第二部分:存放分部方法的实现 public partial class TestClass { // 不需要重复写泛型约束,编译器会自动继承定义部分的约束规则 partial void Execute<T>(T param) { param.Dispose(); } }
合法写法2:实现时重复相同约束
// 分部类第二部分:存放分部方法的实现 public partial class TestClass { // 重复写和定义声明完全一致的约束,同样符合语法规则 partial void Execute<T>(T param) where T : IDisposable { param.Dispose(); } }
注意:如果实现部分要写约束,必须和定义部分的约束完全一致,不能修改或新增约束,否则会编译报错。
规则2:实现声明的参数名、泛型参数名可以和定义声明不一致
只要方法的参数数量、类型、顺序,以及泛型参数的数量完全匹配,参数和泛型参数的名称可以和定义声明不一样,不会影响编译合法性。
// 分部类第一部分:存放分部方法的定义声明 public partial class TestClass { // 定义部分泛型参数名为T,参数名为input、num partial void Handle<T>(T input, int num); }
// 分部类第二部分:存放分部方法的实现 public partial class TestClass { // 泛型参数名改成了TModel,第一个参数名改成了data,第二个参数名改成了count // 参数类型、数量、顺序完全匹配,属于合法实现 partial void Handle<TModel>(TModel data, int count) { Console.WriteLine($"共处理{count}条{typeof(TModel).Name}类型数据:{data}"); } }
注意:为了代码可读性,实际开发中一般不建议随意修改参数和泛型参数的名称,避免产生不必要的混淆。
内容的提问来源于stack exchange,提问作者user17163459
相关产品推荐
相关产品推荐

