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

陈村网站建设免费建自己的网站

陈村网站建设,免费建自己的网站,天猫网站建设的目标是什么意思,王烨晨文章目录引入类型约束子类泛型常用的泛型数据结构前文提要: 💎超快速成,零基础掌握C#开发中最重要的概念💎抽丝剥茧,C#面向对象快速上手💎Winform,最友好的桌面GUI框架💎懂了委托&a…

文章目录

    • 引入
    • 类型约束
    • 子类泛型
    • 常用的泛型数据结构

前文提要:

  • 💎超快速成,零基础掌握C#开发中最重要的概念
  • 💎抽丝剥茧,C#面向对象快速上手
  • 💎Winform,最友好的桌面GUI框架
  • 💎懂了委托,才算真正入门C#

引入

所谓泛型,就是创建一个函数,对所有数据类型都生效。最常见的例子就是运算符,毕竟1+1=21.0+1.0=2.0,足以看出+是对多种数据类型起作用的。

但是,如想创建一个函数add(int a, int b),那么输入add(1.0, 1.0)是肯定要报错的,VS直接就给标红了。

泛型的出现,就很好地解决了这个尴尬的问题

T add<T>(T a, T b) 
{dynamic d1 = a;dynamic d2 = b;return (T)(d1 + d2);
}Console.WriteLine(add<int>(1, 1));
Console.WriteLine(add<double>(1.0, 1.0));

上面代码中,T表示某种数据类型,在调用函数add时,根据add后面的<>加以声明。

但如果就此就写return a+b显然也是不行的,因为+这种运算符并没有对T进行重载,编辑器并不会允许两种未知的类型相加。

这个时候就需要用到dynamic,用来让编辑器放弃类型检查,将任何可能发生的错误都留给运行阶段。

最后,运行结果为

2
2

类型约束

dynamic用着确实爽,但后果就是责任自负,这玩意要是用在团队协作的场合,简直就是灾难,毕竟并非所有对象都可以驾驭加法。

所以,C#的泛型,是可以被约束的泛型,关键就是where,将上述代码写为

T add<T>(T a, T b) where T : struct{dynamic d1 = a;dynamic d2 = b;return (T)(d1 + d2);
}

where T : struct表示T必须是数值类型的一种,所以编译器的类型检查仍会发挥作用,在调用add时,如果T不是数值类型,就会报错。

C#一共有5种约束方案,列表如下

类别条件
structT必须是值类型
classT必须是引用类型
new()T必须有无参数的构造函数
基类名T必须是基类或派生自基类
接口名T必须是指定接口
裸类型

不同类型的约束,或相同类型不同种类的约束,一般是可以混用的,如果不能混用,编译器会提醒。比如struct几乎不能和其他类型混用。如果new()参与了约束,则放在最后。

子类泛型

除了函数可以采用泛型,类当然也可以,不仅可以,而且还能继承。

class MyList<T>
{public T[] a;public MyList(){}       //无参数的构造函数,用于继承public MyList(int n){a = new T[n];}public T this[int index]{get => a[index];set => a[index] = value;}}

MyList相当于是给数组套了一层壳,其构造函数并不存在什么难以理解的地方,唯一有些问题的可能是下面的索引器public T this[int index],这种写法可以实现方括号形式的索引。

可以测试一下

var a = new MyList<int>(5);
for (int i = 0; i < 5; i++)
{a[i] = i;Console.WriteLine(a[i]);
}

结果就不粘贴了,接下来新建一个子类

class MyStack<T> : MyList<T>
{public MyStack(int n){a = new T[n];}public T Pop(){T p = a[a.Length- 1];a = a[0..(a.Length-1)];return p;}
}

然后测试一下

var a = new MyStack<int>(3);
for (int i = 0; i < 3; i++)
{a[i] = i;
}for (int i = 0; i < 3; i++)
{Console.WriteLine(a.Pop());
}

结果为

2
1
0

常用的泛型数据结构

C#通过泛型定义了很多数据结构,例如在讲解switch...case时提到的字典

Dictionary<int, string> card = new Dictionary<int, string>
{{1,"A" },{11, "J" },{12, "Q" },{13, "K" }
};

这种<U, V>的写法,正是泛型的特点,其中U, V就是可以随意声明的变量。如果查看字典的类型参数,可以发现其定义方法是这样的

public class Dictionary<TKey, TValue> : ICollection<KeyValuePair<TKey, TValue>>, ... where TKey : notnull

考虑到本节并不是为了将面向对象,所以字典继承的那一大坨类就省略了,关键是where Tkey:notnull,也就是说,字典对键值对的要求只有一个,就是键不得为null

除了字典之外,还有一些常见的数据结构采用了泛型,列表如下,没事儿可以练习练习。

数据结构说明常用方法
List<T>泛型列表Add, Remove, RemoveAt
LinkedList<T>双端链表AddFirst, AddLast, RemoveFirst, RemoveLast
Queue<T>先进先出列表Enqueue, Dequeue
Stack<T>栈,先进后出Push, Pop
http://www.shuangfujiaoyu.com/news/42141.html

相关文章:

  • 创业做旅游网站百度竞价在哪里开户
  • php网站留言板怎么做找个网站
  • 网博士自助建站系统下载一个产品的网络营销方案
  • 相亲网站做期货现货贵金属的人百度风云榜小说排行榜
  • 智能手机网站建设百度关键词搜索量查询
  • 宛城区建网站高端网站设计公司
  • 网站权限配置外贸推广平台怎么做
  • 日本网页设计网站竞价防恶意点击
  • 哪些网站可以做百科参考资料网站开发流程是什么
  • 贵州做网站seo关键词优化价格
  • 成都网站建设987net南京seo公司哪家
  • 一个网站做3个关键词够seo点击工具帮你火21星热情
  • 简述什么是网站淘宝交易指数换算工具
  • 8818网站建设互联网广告代理可靠吗
  • 广州免费网站建设百度一下你就知道百度一下
  • 网站开发找公司好还是个人百度搜索排名查询
  • 星月教你做网站的文档推广引流
  • 直接做的黄页视频网站怎么创建自己的网站
  • 广州抖音seo价格充电宝seo关键词优化
  • 网站开放培训怎么建立一个网站
  • 苏州网站制作推广优化seo教程
  • 淄博微信网站建设哪里注册域名最便宜
  • 顺德龙江网站建设广东东莞疫情最新消息今天又封了
  • dhl网站发票在哪做怎么做起泡胶
  • 中文企业网站设计欣赏广告发布平台
  • h5页面怎么制作app有哪些九江seo
  • 小米果怎么做视频网站互联网最赚钱的行业
  • 花都网站建设如何建立自己的网站平台
  • 运城哪里做网站推广竞价托管公司
  • 网站制作教程ppt广西seo关键词怎么优化