zoukankan      html  css  js  c++  java
  • C# 泛型

    在定义类或方法的时候,不清楚调用者会使用那种类型的参数,则可以先定义为泛型类型,在调用的时候再指定其类型

    泛型分为泛型方法和泛型类,泛型方法的定义语法如下

    void 方法名<泛型列表>()
    {
        // 方法体
    }

    泛型类的定义语法如下

    public class 类名<泛型列表>
    {
            // 类体
    }

    泛型列表每个参数类型用 “,” 逗号隔开。

    在程序中,泛型就是一个类型,只要是在类中定义了,就可以像使用普通类型一样使用

    static void Method1<T>(T str)
    {
        Console.WriteLine("Method1:" + str);
    }
    Method1<string>("123");
    --> 123
    Method1<int>(12345);
    --> 12345
    Method1<bool>(false);
    --> false
    Method1<bool>(1==1);
    --> true

    根据调用者指定的类型不同,可以使用不同的参数,如果指定了string类型,但是参数不带“”双引号,就会报错

    使用泛型类与使用泛型方法一致

    public class Class1<T>{
        public void Method1(T str)
        {
            Console.WriteLine("参数为:" + str);
        }
    }
    Class1<string> c = new Class1<string>();
    c.Method1("fsa");
    --> fsa
    Class1<int> c1 = new Class1<int>();
    c1.Method1(123);
    --> 123

    因为在类中声明了泛型所以方法中可以直接使用

    泛型也可以指定条件,比如这个类型只可以是stirng或者int这两个其中一个,其他类型不可以

    指定条件语法如下

    void 方法名<泛型列表>() where 泛型参数 : int,class之类的类型
    {
        // 方法体
    }

    泛型类的定义语法如下

    public class 类名<泛型列表>where 泛型参数 : int,class之类的类型
    {
      // 类体
    }

    具体条件可以参考下面的表格

    约束描述
    where T: struct 类型参数必须是值类型。 可以指定除 Nullable 以外的任何值类型。 有关详细信息,请参阅使用可以为 null 的类型
    where T : class 类型参数必须是引用类型;这同样适用于所有类、接口、委托或数组类型。
    where T : new() 类型参数必须具有公共无参数构造函数。 与其他约束一起使用时,new() 约束必须最后指定。
    where T :<基类名> 类型参数必须是指定的基类或派生自指定的基类。
    where T :<接口名称> 类型参数必须是指定的接口或实现指定的接口。 可指定多个接口约束。 约束接口也可以是泛型。
    where T : U 为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。
  • 相关阅读:
    某大神C#框架后台发送信息的查找及破解
    多平台下Modbus通信协议库的设计(一)
    wpf 窗口程序下将datagrid导出为excel
    luogu P2598 [ZJOI2009]狼和羊的故事 |网络流最小割
    luogu P3171 [CQOI2015]网络吞吐量 |网络流最大流
    luogu P2469 [SDOI2010]星际竞速 |网络流费用流
    luogu P2172 [国家集训队]部落战争 |网络流最少路径覆盖
    luogu P2045 方格取数加强版 |最大费用最大流
    luogu P6327 区间加区间sin和 |线段树
    luogu P2402 奶牛隐藏 |网络流最大流+二分
  • 原文地址:https://www.cnblogs.com/sunhouzi/p/12300061.html
Copyright © 2011-2022 走看看