十三、泛型
admin
2024-03-20 01:07:45
0

文章目录

  • 1、泛型
  • 2、泛型约束
    • 2.1、值类型
    • 2.2、引用类型
    • 2.3、存在无参公共构造函数的非抽象类型
    • 2.4、某个类本身或其派生类
    • 2.5、某个接口的派生类
    • 2.6、另一个泛型类型本身或其派生类型
  • 3、约束组合使用
  • 4、多个泛型约束

1、泛型

  • class 类名
  • interface 接口名
  • 函数名(...)
  • 泛型可以有多个,用 , 分开
// 泛型类
class MyTest
{public T Value;// 这个不是泛型方法哦(只有函数名后面有<>的才是)public void Test(T t){// ...}
}// 普通类
class MyTest
{// 泛型方法public void Test(T t){Console.WriteLine(t);}// 泛型方法public void Test(){T t = default(T);// ...}
}// 泛型接口
interface ICommon
{T Value{set;get;}
}// 普通类继承泛型接口要指定泛型具体类型
class MyCommonImpl : ICommon
{// ...
}// 泛型类与泛型接口所用泛型相同则可不指定接口泛型具体类型
class MyCommonImpl02 : ICommon
{// ...
}

2、泛型约束

  • 关键字:where
  • 一共 6 种约束
    • 值类型:where 泛型字母:struct
    • 引用类型:where 泛型字母:class
    • 存在无参公共构造函数的非抽象类型:where 泛型字母:new()
    • 某个类本身或其派生类:where 泛型字母:类名
    • 某个接口的派生类:where 泛型字母:接口名
    • 另一个泛型类型本身或其派生类型:where 泛型字母:另一个泛型类型字母

2.1、值类型

class Test where T:struct
{public T Value;public void TestFun(K k) where K:struct{Console.WriteLine(k);}
}// 某方法内↓↓↓
Test test = new Test();
test.Value = 10;
test.TestFun(test.Value); // 10

2.2、引用类型

class Test where T:class
{public T Value;public void TestFun(K k) where K:class{Console.WriteLine(k);}
}// 某方法内↓↓↓
Test test = new Test();
test.Value = "嘎嘎";
test.TestFun(test.Value); // "嘎嘎"

2.3、存在无参公共构造函数的非抽象类型

class Test where T:new()
{public T Value;public void TestFun(K k) where K:new(){Console.WriteLine(k);}
}class MyCons
{public override string ToString(){return "这是一个有无参构造的类的ToString()";}
}// 某方法内↓↓↓
Test test = new Test();
test.Value = new MyCons();
test.TestFun(test.Value); // "这是一个有无参构造的类的ToString()"

2.4、某个类本身或其派生类

class Test where T:MyCons
{public T Value;public void TestFun(K k) where K:MyCons{Console.WriteLine(k);}
}class MyCons
{public override string ToString(){return "这是MyCons的ToString()";}
}// 某方法内↓↓↓
Test test = new Test();
test.Value = new MyCons();
test.TestFun(test.Value); // "这是MyCons的ToString()"

2.5、某个接口的派生类

class Test where T : ITest
{public T Value;public void TestFun(K k) where K : ITest{Console.WriteLine(k);}
}interface ITest
{ }class MyTest : ITest
{public override string ToString(){return "这是 ITest 实现类 MyTest 的ToString()";}
}// 某方法内↓↓↓
Test test = new Test();
test.Value = new MyTest();
test.TestFun(test.Value); // "这是 ITest 实现类 MyTest 的ToString()"

2.6、另一个泛型类型本身或其派生类型

class Test where T : U
{public T ValueT;public U ValueU;public void TestFun(K k, V v) where K : V{Console.WriteLine("{0}{1}", k, v);}
}interface ITest
{ }class MyTest : ITest
{public override string ToString(){return "这是 ITest 实现类 MyTest 的ToString()";}
}class YourTest : ITest
{public override string ToString(){return "这是 ITest 实现类 YourTest 的ToString()";}
}// 某方法内↓↓↓
Test test = new Test();
test.ValueT = new MyTest();
test.ValueU = new YourTest();
test.TestFun(test.ValueT, test.ValueU);
// 这是 ITest 实现类 MyTest 的ToString()这是 ITest 实现类 YourTest 的ToString()

3、约束组合使用

  • 不冲突的情况下随意组合
class Test where T:class, new()
{}

4、多个泛型约束

  • 罗列 where 就完了(别随手加逗号啥的,空开即可)
class Test where T:class, new() where V:struct
{}

相关内容

热门资讯

美食美酒媒体|DQ新推出五常大... 时尚广州新媒体讯:有一种香气,根植于我们最深层的味觉记忆,那是属于大米温润而踏实的香。它通常与家、与...
原创 朱... 在当下这个信息爆炸的时代,明星的一举一动频繁成为公众关注的焦点。他们的生活仿佛被放大在显微镜下,然而...
企业培训营选在新加坡,才发现旅... 这是我们公司第一次将年度培训营搬出国门,选择了新加坡。这也是我们第一次发现,原来一家旅行社能做的,不...
今年上半年,西藏自治区接待国内... 8月5日,国务院新闻办公室举行新闻发布会,介绍西藏自治区成立60周年经济社会发展成就。会上,西藏自治...
旅居大理 | 住进弥渡白崖古城... 在大理白族自治州弥渡县红岩镇大营村,有一个历史文化厚重、田园风貌优美的村子——白崖古城村,这里是白子...
新加坡接待经验分享:旅行社不只... 在很多人眼里,旅行社的工作可能就是安排车辆、订酒店、规划景点顺序,像一份行程表那样简单。但在B端客户...
家庭自制美味肉酱的详细做法步骤... 在家里自制肉酱,一直是很多家庭厨师们追求的美食体验。无论是搭配意大利面、披萨,还是用来做三明治,肉酱...
以酒为笺,“锦鳞游”共书中泰金... 2025年恰逢中泰建交50周年,8月4日,泰王国驻上海总领事馆举办的“Spirits of Frie...
星空夜话|这5种家常菜营养不输... 人参是传统医学中的补益药材,基于其显著的养生功效,民间逐渐形成了“类参食材”的概念,将萝卜、秋葵、芡...
Gelato抹茶专门店:南通首... 当上海的Gelato 冰淇淋品牌在商场与街区之间激烈角逐时,南通如皋海阳金地城邦东大门的一家Gela...
经典混炖馅的详细做法与技巧分享... 在中国的传统美食中,馅料的多样性和丰富性总是让人赞不绝口。无论是饺子、包子,还是各种糕点,馅儿的调配...
清新凉拌手撕鸡柠檬虾,鲜嫩多汁... 凉拌手撕鸡柠檬虾的做法分析1. 调制料汁步骤 1:碗中放入蒜末、白芝麻、小米辣。步骤 2:热油泼香,...
原创 为... 最近总被朋友追问:"为什么你做的酸菜鱼比饭店还好吃?"今天就把压箱底的秘方公开!金黄酸香的汤底咕嘟咕...
一城一味一夏天 一城一味 一夏天 夏日解暑吃什么? - SUMMER - 汪曾祺先生曾在散文《夏天》中写道,...
福州zui古早的中式茶饮,原来... 最近的外卖茶饮大战打得火热,每天都有点不完的券,喝不完的茶饮,市面上的茶饮品牌都快要认全了。 很多...
原创 立... 8月7日立秋,老话说“立秋到,贴秋膘”,这古训里藏着的,是身体对能量积累的天然渴望,如同大地开始悄然...
读创今日荐书丨如何看待餐桌上的... 深圳商报•读创客户端首席记者 魏沛娜 有没有哪种美食是恒久不变的? 我们的饮食和烹饪方式背后有何文化...
诗意中国丨农历六月 诗意中国丨...   农历六月,也称“荷月”。此时荷花盛放,亭亭净植,不染淤泥,不畏骤雨,是极具“节令之美”的象征。“...
文绮华:立足区域旅游合作,期待... 澳门特别行政区政府旅游局局长文绮华。受访者供图 在粤港澳大湾区文旅产业融合发展中,澳门特区政府以推进...