You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:09:04