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.
协变和逆变
在创建泛型类型的实例,编译器会接收泛型类型声明以及类型实参来创建构造类型。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构