重学c#系列——索引器(十)】的更多相关文章

前言 重学c#系列继续更新,简单看一下字典的源码. 看源码主要是解释一下江湖中的两个传言: 字典foreach 顺序是字典添加的顺序 字典删除元素后,字典顺序将会改变 正文 那么就从实例化开始看起,这里我们假定key 是string 情况下开始看. 一般我们之间实例化: Dictionary<string, string> keys = new Dictionary<string, string>(); 那么看下内部的实例化是怎么样的. public Dictionary() :…
前言 前文提及到了一些基础的linq的基础,那么这一节是一些补充. 正文 关于一个orderby的问题. 比如我们输入两个order by. 这里告诉我们多个order by是没有意义的,如果多个那么就是最后一个是有意义的. 这里要使用,不要去记最后一个是有意义的,这会让你的思维混乱,记得用一个orderby就好.用完order by之后就可以用then by了. 这里提及一下原理,前面提及到包装器,为什么生效的是最后一个呢. 通过包装成一个OrderedEnumerable: 然后foreac…
前言 什么是c#呢? 首先你是如何读c#的呢?c sharp?或者c 井? 官方读法是:see sharp. 有没有发现开发多年,然后感觉名字不对. tip:为个人重新整理,如学习还是看官网,c# 文档天下无敌. 正文 c#和java一样,他们之间有很多故事,尤其是官司,c#同样是一门面向对象的语言,同样也支持面向组件编程. 复制一下面向对象和面向组件编程的概念: 面向对象技术的基础是封装--接口与实现分离,面向对象的核心是多态--这是接口和实现分离的更高级升华,使得在运行时可以动态根据条件来选…
前言 该系列准备继续完善,一共108篇,持续更新. 正文 为什么有动态类型呢? 是因为很多东西天生就是动态类型的. 比如xml 和 json.cvs.数据库表,这些本来就是数据类型的. 在反射系列中提及到,为什么有发送呢? 是因为只有在运行的时候你才能知道他是什么类型. 同样的xml.json这些也是只有运行的时候才知道他有什么样的类型,当我们加载xml.json 映射成一个对象的时候,里面的属性也只有加载完后我们的程序才知道. 那这样就有一个问题啊,那就是加载的时候我们的程序才知道有这个属性,…
前言 简单介绍一下list. 正文 这里以list为介绍. private static readonly T[] s_emptyArray = new T[0]; public List() { this._items = List<T>.s_emptyArray; } list 本质是一个数组. 同样我们可以指定容量,如果我们知道了我们大概需要多少数据,那么我们可以指定一下,这样避免了resize的损耗. 就跟我们操作系统一样,提前申请内存大小.所以我们程序一般都有一个申请内存,实际使用内…
前言 继续介绍一些复杂的linq. 正文 groupjoin 这个函数: 有department public class Deployment { public string Id { get; set; } public Deployment(string id) { Id = id; } } 有Employee: public class Employee { public string DepartmentId { get; set; } public string Name { get…
前言 我们都知道operator 可以对我们的操作符进行重写,那么explicit 和 implicit 就是对转换的重写. 正文 explicit 就是强制转换,然后implicit 就是隐式转换. static void Main(string[] args) { string a = string.Empty; ConsumeValue consumeValue = new ConsumeValue(); consumeValue.Value = "测试数据"; a = cons…
前言 简单整理一下string.empty 和 "" 还有 null的区别. 正文 首先null 和 string.empty 还有 "" 是不一样的. null 关键字是表示不引用任何对象的空引用的文字值. null 是引用类型变量的默认值. 我们编辑高级语言的时候就可以表示的含义就是不引用任何对象的空引用. 但也不能完全这样说,应该说在语法含义上是这样的,具体的肯定指向某个引用. string.empty 和 "" 实际上是一样的. // T…
前言 简单整理一下逆变和协变. 正文 什么是逆变和协变呢? 首先逆变和协变都是术语. 协变表示能够使用比原始指定的派生类型的派生程度更大的类型. 逆变表示能够使用比原始指定的派生类型的派生程度更小的类型. 这里student 继承 person. 这里这个报错合情合理. 这里可能有些刚入门的人认为,person 不是 student 的父类啊,为什么不可以呢? 一个列表student 同样也是一个列表的 person啊. 这可能是初学者的一个疑问. 但是实际情况是list 是一个类型, list…
前言 简单介绍一下什么是委托. 正文 以前也写过委托,这次算是重新归档,和新的补充吧. https://www.cnblogs.com/aoximin/p/13940125.html 有些人说委托是函数指针的包装,也有些人说委托是一个方法或多个方法的引用. 这都是没有问题,委托是一个概念,微软官方文档说委托是一种引用类型,表示对具有特定参数列表和返回类型的方法引用. 我觉得太啰嗦了,实际上就是方法的引用. 上面都是委托的概念,但是实现方式每种语言可能都不一样. 比如c++ 和 c 用的是函数指针…