范型
字典Dict
//使string键不区分大小写 Dictionary<string, int> things =new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); Dictionary<string, int> sta = new Dictionary<string, int>() {//初始化索引器 [key] = value ["str1"] = 6, ["str2"] = 7 };
定义范型类
class MyClass<T1,T2,T3> {//不能直接将T1当做类创建实例 private T1 type1; public MyClass(T1 item1) => type1 = item1; public T1 Type1 { get => type1;} public bool Compare(T1 op1,T2 op2) { return op1 != null && op2 != null; } }
Default关键字
用于实例化时为不同类型的字段或属性赋值
class Default关键字<T> { private T t1; /// <summary> /// 当不能确定值类型或引用类型时,用下述方法 /// 此时若T为引用类型则赋值null,T为值类型则赋值0 /// </summary> public Default关键字() { t1 = default(T); } }
约束类型
对范型类型进行约束,使其可用类型受到限制
约束 | 定义 |
struct | 类型必须是值类型 |
class | 类型必须是引用类型 |
base-class | 类型必须是基类或继承自基类。可以给这个约束提供任意类名。 |
interface | 类型必须是接口或实现了接口 |
new() | 类型必须有一个公共的无参构造函数 |
注意:如果new()用作约束,他就必须是为类型指定的最后一个约束
class Where约束<T1, T2,T3>where T1 :struct where T2 :T3 { //约束必须是接口、非密封类或类型参数 //在继承含有约束的范型时,T不能超集 }
class Animals<T1> where T1:Animal { private List<T1> animal; public List<T1> Animal { get => animal; } public void Tests() { foreach (T1 str in Animal) { //对str操作 } } }
多态性的运用
范型方法与多态性的结合,例如如下方法,可以筛选出任意Animal下的子类型
class Animals<T1> where T1:Animal { private List<T1> animal; public List<T1> Animal { get => animal; } public Animals<U> GetAnimals<U>() where U:T1 {// Animals<U> animalss = new Animals<U>(); foreach (T1 ani in Animal) { if(ani is U) animalss.animal.Add(ani as U);//此处ani必须有明确的类型约束,不然会报错 } return animalss; } }
范型结构
public struct MyStruct<T1,T2> {//范型结构 public T1 t1; public T2 t2; public T1 t3; public T2 t4; }
范型接口
public interface MyAnimalInterface<T1> where T1 : struct {//范型接口 void Test1(T1 a1, T1 a2); int GetInt(T1 a1); T1 GetT1 { get;} }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器