当前位置: 首页 > news >正文

东莞 网站建设网站定制制作公司

东莞 网站建设,网站定制制作公司,一个关键词要刷多久,产品设计哪家公司好文章目录1、泛型2、泛型约束2.1、值类型2.2、引用类型2.3、存在无参公共构造函数的非抽象类型2.4、某个类本身或其派生类2.5、某个接口的派生类2.6、另一个泛型类型本身或其派生类型3、约束组合使用4、多个泛型约束1、泛型 class 类名<T>interface 接口名<T>函数名…

文章目录

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

1、泛型

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

2、泛型约束

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

2.1、值类型

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

2.2、引用类型

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

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

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

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

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

2.5、某个接口的派生类

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

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

class Test<T, U> where T : U
{public T ValueT;public U ValueU;public void TestFun<K, V>(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<ITest, ITest> test = new Test<ITest, ITest>();
test.ValueT = new MyTest();
test.ValueU = new YourTest();
test.TestFun(test.ValueT, test.ValueU);
// 这是 ITest 实现类 MyTest 的ToString()这是 ITest 实现类 YourTest 的ToString()

3、约束组合使用

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

4、多个泛型约束

  • 罗列 where 就完了(别随手加逗号啥的,空开即可)
class Test<T, V> where T:class, new() where V:struct
{}
http://www.dtcms.com/a/490732.html

相关文章:

  • Python 线程 类比c++【python】
  • 舆情监测的底层逻辑与技术方法探析
  • 谈谈redis的持久化
  • 网站建设进度深圳网站建设制作营销
  • SSM高校学生社团管理系统n4pcu(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 强化学习_Paper_2000_Eligibility Traces for Off-Policy Policy Evaluation
  • Kubernetes秘钥与配置管理全解析
  • Python 匿名函数、map、filter、sort 用法详解
  • wordpress 4.0 伪静态seo优化一般优化哪些方面
  • 上海自助模板建站wordpress被黑
  • 数据可视化延迟实时大屏优化:WebSocket增量传输+Canvas渲染数据延迟压缩至300ms
  • TimerFd Epoll
  • 百度网盘怎么实现不限速的高速下载?
  • UltraEdit做网站教程定制开发网站如何报价单
  • 《彻底理解C语言指针全攻略(5)--指针和函数专题》
  • 广州做网站找哪个公司好建设网络道德教育网站不包括
  • TUP及ESOP动态股权激励:算法是核心
  • 数据库知识全解析:从基础概念到MySQL实战
  • Python - 100天从新手到大师:第五十七天获取网络资源及解析HTML页面
  • PLY文件格式讲解与可视化展现方式(基于Viser库)
  • 中山百度网站排名织梦播放器网站
  • 珠海建站网站兰州模板网站seo价格
  • jQuery面试题精选:从基础到高级
  • 计算机操作系统:死锁概述
  • C++之理解共用体
  • Java Spring配置
  • 【多进线程】python多进线程与通信
  • 低代码新建表单实操:纯表单 / 列表表单配置 + 表名避坑
  • 前端做数据表格的网站网站建设与运营市场风险
  • 从入门到精通:深度探索RT-Thread物联网操作系统