C#中的泛型(未完成)

C#中的泛型

泛型提供了一种更优雅的方式,可以让多个类型共享这一组代码,泛型允许声明类型参数化,用不同的类型进行实例化,在创建类的实例时指明真实的类型。

在C#中,提供了5种泛型:类、结构、接口、委托、方法,前面4种是类型,方法是成员

泛型类

如何声明一个泛型类:

  • 在某些类型上使用占位符声明一个类。
  • 为占位符提供真实数据类型,这样就有了真实类的定义。
  • 创造构造类型的实例。

声明泛型类

  • 在类名之后放置一组尖括号。
  • 在尖括号中用逗号分隔的占位符字符串表示需要提供的类型,这叫做类型参数。
  • 在泛型类声明的主体中使用类型参数来表示代替类型。

例如:

namespace CSharpProject1;

class MyStack<T>
{
    private T[] StackArray;
    private int StackPointer = 0;
    private int StackMaxLength = 10;

    public void Push(T x)
    {
        if (!IsStackFull()) StackArray[StackPointer++] = x;
    }

    public T Pop()
    {
        if (!IsStackEmpty()) return StackArray[--StackPointer];
    }

    public bool IsStackFull()
    {
        return (StackMaxLength == StackPointer) ? true : false;
    }

    public bool IsStackEmpty()
    {
        return (StackPointer == 0) ? true : false;
    }
}

class Program
{
    static void Main(string[] args)
    {
        MyStack<int> stack = new MyStack<int>();
    }
}

泛型委托

泛型委托和非泛型委托非常相似,不过类型参数决定了能接收什么样的方法。

  • 要声明泛型委托,在委托名称之后、委托参数列表之前的尖括号中放置类型参数列表。

    delegate R MyDelegate<T, R>(T value);
    

例如:

namespace CSharpProject1;

delegate T Func<T1, T2, T>(T1 t1, T2 t2);

class Simple
{
    static public string PrintString(int t1, int t2)
    {
        int total = t1 + t2;
        return total.ToString();
    }
}

class Program
{
    static void Main(string[] args)
    {
        var MyDeleGate = new Func<int, int, string> (Simple.PrintString);
        string res = MyDeleGate.Invoke(15, 13);
        Console.WriteLine($"{res}");
    }
}
D:/RiderProjects/CSharpProject1/CSharpProject1/bin/Debug/net8.0/CSharpProject1.exe
28

Process finished with exit code 0.

协变和逆变

在创建泛型类型的实例,编译器会接收泛型类型声明以及类型实参来创建构造类型。

协变

逆变

不变

posted @   LilyFlower  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示