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 提供的参数。
  • 相关阅读:
    【Network】OVS、VXLAN/GRE、OVN等 实现 Docker/Kubernetes 网络的多租户隔离
    【openStack】Libcloud 如何支持 keystone V3?
    【Network】修改docker启动默认网桥docker0为自定义网桥
    【Network】TCPDUMP 详解
    【Network】OVS基础知识
    【Docker】Docker主机为什么ip nets 查不到网络空间
    sql-in/not in和exists/not exists的区别
    sql-exists和not exists
    oracle-分页查询方案
    mysql-函数FOUND_ROWS()
  • 原文地址:https://www.cnblogs.com/sunhouzi/p/12300061.html
Copyright © 2011-2022 走看看