当前位置: 首页 > article >正文

windows C#-泛型方法

泛型方法是通过类型参数声明的方法,如下所示:

static void Swap<T>(ref T lhs, ref T rhs)
{
    T temp;
    temp = lhs;
    lhs = rhs;
    rhs = temp;
}

如下示例演示使用类型参数的 int 调用方法的一种方式:

public static void TestSwap()
{
    int a = 1;
    int b = 2;

    Swap<int>(ref a, ref b);
    System.Console.WriteLine(a + " " + b);
}

还可省略类型参数,编译器将推断类型参数。 如下 Swap 调用等效于之前的调用:

Swap(ref a, ref b);

类型推理的相同规则适用于静态方法和实例方法。 编译器可基于传入的方法参数推断类型参数;而无法仅根据约束或返回值推断类型参数。 因此,类型推理不适用于不具有参数的方法。 类型推理发生在编译时,之后编译器尝试解析重载的方法签名。 编译器将类型推理逻辑应用于共用同一名称的所有泛型方法。 在重载解决方案步骤中,编译器仅包含在其上类型推理成功的泛型方法。

在泛型类中,非泛型方法可访问类级别类型参数,如下所示:

class SampleClass<T>
{
    void Swap(ref T lhs, ref T rhs) { }
}

如果定义一个具有与包含类相同的类型参数的泛型方法,则编译器会生成警告 CS0693,因为在该方法范围内,向内 T 提供的参数会隐藏向外 T 提供的参数。 如果需要使用类型参数(而不是类实例化时提供的参数)调用泛型类方法所具备的灵活性,请考虑为此方法的类型参数提供另一标识符,如下方示例中 GenericList2<T> 所示。

class GenericList<T>
{
    // CS0693.
    void SampleMethod<T>() { }
}

class GenericList2<T>
{
    // No warning.
    void SampleMethod<U>() { }
}

泛型方法可重载在数个泛型参数上。 例如,以下方法可全部位于同一类中:

void DoWork() { }
void DoWork<T>() { }
void DoWork<T, U>() { }

还可使用类型参数作为方法的返回类型。 下面的代码示例显示一个返回 T 类型数组的方法: 

T[] Swap<T>(T a, T b)
{
    return [b, a];
}

 


http://www.kler.cn/a/500579.html

相关文章:

  • java项目之房屋租赁系统源码(springboot+mysql+vue)
  • 【源码解析】Java NIO 包中的 ByteBuffer
  • Uniapp Android 本地离线打包(详细流程)
  • matlab编写分段Hermite插值多项式
  • 高级软件工程-复习
  • springBoot整合ELK Windowsb版本 (elasticsearch+logstash+kibana)
  • Python----Python基础(字符串,列表,元组,字典,集合的总结)
  • 【CSS】设置滚动条样式
  • 【源码解析】Java NIO 包中的 MappedByteBuffer
  • 一文详解YOLOv8多模态目标检测(可见光+红外图像,基于Ultralytics官方代码实现),轻松入门多模态检测领域!
  • 金融项目实战 03|JMeter脚本实现手工接口测试
  • 【微信小程序】回到顶部图标-页面滚动事件 | 漫画-综合实训
  • 深度学习中的EMA技术:原理、实现与实验分析
  • 计算机网络之---传输层的功能
  • conntrack iptables 安全组
  • Oracle 使用dbms_stats.gather_table_stats来进行表analyse,收集表统计信息
  • 《零基础Go语言算法实战》【题目 2-7】defer 关键字特性
  • spring boot 支持jsonp请求
  • 阿里云发现后门webshell,怎么处理,怎么解决?
  • React - router的使用 结合react-redux的路由守卫
  • 依赖网络系统混合级联故障下系统可靠性提高与弹性的组合优化
  • 网络安全 | Web安全常见漏洞和防护经验策略
  • 苍穹外卖及软件开发介绍
  • 基于 B2C 的网上拍卖系统:秒杀与竞价功能的实现
  • ip归属地和手机号是一个地址吗
  • 【微服务】面试 2、负载均衡