随笔分类 - c# 语言
玩转C#语法
摘要:数组是最常用的数据结构(数据单元的集合)。c#数组分三类,一类是一维数组;二、多维数组;三、交错数组。一、语法1.一维数组:定义:元素类型[] 数组名;初始化一维数组: 元素类型[] 数组名={第一个元素,第二个,,,,}使用数组: 数组名[下标]例子:int[] a = {1,2,3} //定义一个元素为int的数组,然后初始化为3个元素(1,2,3)的集合。a[0];//第一个元素,即1a[2];//第三个元素,即3a[1] = 100; //第二个元素修改为100;2.多维数组:定义:元素类型[ , ] 数组名; //一个逗号分隔出两部分表示2维,两个逗号分隔出三部分表示3维。初始化多维
阅读全文
摘要:c#中的泛型不支持特例化。所谓特例化就是针对 T 的不同实参,编写特定的代码。因此c#的泛型实际上都是一份代码,不会出现c++中的代码爆炸问题(缺点是让你的exe看起来很小)。唯一的例外是对值类型,因为值类型的大小不一致,所以需要生成新的代码,解决入栈出栈等实现问题,但逻辑上是一致的。一、泛型的语法二、协变和逆变协变这个词是怎么来的?据说是来自数学专业,难怪让人摸不着脑袋。要了解协变逆变,首先要了解类型转化的过程。类型系统支持类型转换,从子类可以转换成基类类型。假设子类有成员A,B, 父类有成员A,当子类对象转成父类,也就是客户端会把子类当作父类来用。当使用父类A成员,实际上就是使用子类的A成
阅读全文
摘要:结构和类的共同点都是属于抽象数据类型,包含数据和数据的操作。不同点在于结构偏重于数据语意,而类偏重於行为语意。我们不关心对象内部是怎么实现的,我们关心的是他提供给我什么接口,有什么操作。从技术上来说,结构属于值类型,而类属于引用类型。结构不能指定继承基类类型,类可以。不过结构和类都能实现接口。一、应用场合结构的应用场合:一、自定义数据类型,数据成员是公开的,提供工具函数。二、抽象的数据类型,数据成员是密封的,提供相关的数据操作函数。总之,都是围绕数据作文章。类的应用场合:一、提供一组类,形成一个有机整体,形成一个系统,类数据成员是密封的,只提供相互通信的函数接口。类主要通过不同的类组成一个类间
阅读全文
摘要:这个主题是关于委托的。一、委托是什么?委托是用delegate定义的函数指针(其实并不只是一个指针,而是包含一组相关数据)。委托类型定义委托变量,委托变量可以用“函数名”、匿名函数和lambda赋值。而委托变量可以调用该函数。二、事件是什么?事件是对委托的封装,类似属性对字段的封装。事件施加的限制是:一、规定委托的类型,void (Object, EventArgs 或其子类 );二、对外只提供增加关联函数+= 操作和减少关联函数-=操作,而没有提供获取该委托变量的接口,防止任意修改。只需要在定义委托变量前面加event 关键字就定义了事件,标准事件的委托是EventHandler<T&
阅读全文
摘要:CTS通用类型系统,是.Net中一套定义类型的规则。我们要掌握c#开发,首先要建立这个类型概念,只有知道c#的元素是什么类型,才能进行相关的分析和选材。 一、值类型和引用类型 C#分两个大类,一类是引用类型;另一类是值类型。 引用类型从技术上来讲,就是一个指针,指向具体的数据;而值类型实际就存放数据。因此引用类型大小都是固定的(虽然它实际关联其他部分,但是你传递引用类型不需要传递这些,只需要...
阅读全文
摘要:1。协变逆变协变逆变用于接口和委托的泛型参数的一组关键字, out 和 in协变: I<out object> = I<sting>逆变: I<in string> = I<objet>ps。泛型实例并不存在继承关系ps。本质都是调用实例算法。协变接口是开放的,只要实现子类参数的定义,就可以调用特例算法;逆变接口是封闭的,只能向上调用父类参数的算法。协变逆变不支持值类型参数,不支持ref,out函数形参,不支持作为接口方法的泛型约束。该接口不能嵌套类,枚举或结构。协变的参数只能用来做方法的返回类型,逆变的参数只能用作方法的参数类型。协变逆变只是限
阅读全文
摘要:.net的性能瓶颈,毫无疑问是在内存管理上面。自动内存回收解决不了所有的问题,反而会制造性能问题。所以大批c++专家都不赞同在c++内部添加类似.net的内存管理机制,只是有保留的通过程序库来支持相关技术。java老爱说c/c++管不好内存,容易泄露。但是其实本质上还不是将本来该由终端程序员自己处理的事情,交给了框架开发人员来处理了。既然都是程序员,凭什么说你这些框架开发者就不会出现人为错误?他们是专家,对大部分菜鸟级别的程序员来说,这个策略有点帮助,这是当然。但是从根本上,交给框架开发人员处理是有局限性的。他们无法预料到最终的应用程序有怎样的需求,脱离了具体的开发环境,也就无法做出最体贴的解
阅读全文
摘要:我们知道,一般的面向对象语言,都会有类,而类成员一般有三种访问权限:公开,保护,私有。有些人说,“保护”似乎没有什么价值,还建议不用。有些人却认为,没有“保护”,举步维艰。我觉得,“保护”属于类库维护者,而“公开”属于类库使用者。只要我们明白这两个身份的不同,就好理解该如何使用“保护”了。比如,你本身是类库的设计者,或者是团队设计者之一,那么你也可能自己做自己的类库维护者。但是类库维护者并不好当。从接口的角度,“保护”成员对类库维护者来说是属于“接口”级别的,所谓接口,就要维持他的不变性。我们要维持接口的不变性,非常难,唯一的办法就是尽量减少“接口”,将不必要的封装起来。但是“保护”成员却将很
阅读全文