C#基础学习--泛型

C#中的泛型

泛型允许我们声明  类型参数化 的代码,可以用不同的类型进行实例化

C#基础学习--泛型_第1张图片

 C#提供了5钟泛型:类,结构,接口,委托和方法  前面四个是类型,而方法是成员

C#基础学习--泛型_第2张图片

↑  这张图看不懂什么意思

 泛型类

C#基础学习--泛型_第3张图片

 泛型类不是实际的类,而是类的模板,所以我们必须先从他们构建实际的类类型,然后创建这个构建后的类类型的实例

C#基础学习--泛型_第4张图片

 声明泛型类

C#基础学习--泛型_第5张图片

创建构造函数

 C#基础学习--泛型_第6张图片

 创建变量和实例

 类型参数的约束

要让泛型变得更有用,我们需要提供额外的信息让编译器直到参数可以接受那些类型。这些额外的信息叫做约束。只有符合约束的类型才能替代给定的类型参数,来产生构造函数

Where 子句

约束使用where子句列出

C#基础学习--泛型_第7张图片

C#基础学习--泛型_第8张图片

C#基础学习--泛型_第9张图片

 泛型方法

方法是成员不是类型,泛型方法可以在泛型和非泛型类以及结构和接口中声明

C#基础学习--泛型_第10张图片

声明泛型方法

 C#基础学习--泛型_第11张图片

 调用泛型方法 

C#基础学习--泛型_第12张图片

 扩展方法和泛型类

C#基础学习--泛型_第13张图片

using System;
using System.Collections.Generic;
using System.Text;

namespace Csharpzuoye
{

    static class ExtendHolder
    {
        public static void Print(this Holder h)
        {
            T[] vals = h.GetValues();
            Console.WriteLine("{0},\t{1},\t{2}", vals[0], vals[1], vals[2]);
        }
    }
    class Holder
    {
        T[] vals = new T[3];

        public Holder(T v0,T v1,T v2)
        { vals[0] = v0; vals[1] = v1; vals[2] = v2; }

        public T[] GetValues() { return vals; }
    }

    class Program
    {
        static void Main()
        {
            var intHolder = new Holder(3, 5, 7);
            var stringHolder = new Holder("a1", "b2", "c3");
            intHolder.Print();
            stringHolder.Print();
        }
    }
}

 

泛型结构

与泛型类相似,泛型结构可以有类型参数和约束。泛型结构的规则和条件与泛型类是一样的

C#基础学习--泛型_第14张图片

 泛型委托

类型参数决定了能接受什么样的方法

C#基础学习--泛型_第15张图片

 C#基础学习--泛型_第16张图片

 泛型接口

你可能感兴趣的:(C#,C#)