C# 学习总结
文章平均质量分 68
gishero
这个作者很懒,什么都没留下…
展开
-
C#==>关于字符串(string类和StringBuilder类)
1,创建字符串,如果多次创建一个字符串,或者创建一个较长的字符串,String类就会变得效率低下。 这时候就去要考虑使用StringBuilder类。 比如对一个较长的字符串反复做做Replace()操作的时候,每次内存都会创建一个新的字符串地址。虽然Replace方法是一种智能化的工作方式,但这样做效率还是很低。虽然内存回收机制会自动回收那些不再被引用的内存,但依然还是要原创 2010-01-20 20:36:00 · 1124 阅读 · 0 评论 -
C#==>Array类
1,Array常用属性 Length 返回元素个数,LongLength 当元素个数超出int型范围时使用,Rank返回数组的维数 2,Array类是一个抽象类,不能使用构造函数来创建数组。 但可以这样做Array iArray = new int[] { 1, 2, 3, 4 };for (int i = 0; i < iArray.Length; i++){原创 2009-12-12 07:26:00 · 857 阅读 · 0 评论 -
C#==>接口 及 基于接口的工厂模型
1,声明接口在语法上与声明抽象类完全相同,但不允许提供接口中任何成员的执行方式。 2,不能实例化接口,他只能包含其成员的签名。 3,接口不能有构造函数或字段。但可以有属性, 4,因为.NET的接口通常是公共契约,例如要与VB兼容,而VB并不支持运算符重载,所以C#中的接口定义也不允许包含运算符。 5,接口定义的成员上不允许声明运算符。 6,接口成员总是公共的原创 2009-12-10 21:38:00 · 2336 阅读 · 4 评论 -
C#==>枚举
看下面简单例子,foreach实现队自定义类Person的循环出力。 public class Person { public string FirstName { get; set; } public string LastName { get; set; } public Person(string FirstNam原创 2009-12-13 11:09:00 · 587 阅读 · 0 评论 -
C#类==>数组相关
1,使用引用类型的数组。 数组不仅仅可以声明预定义类型,还可以声明定制类型的数组。 如右下类person public class Person { public string FirstName { get; set; } public string LastName { get; set; } p原创 2009-12-10 23:27:00 · 890 阅读 · 0 评论 -
C#==>类型转换 与 装箱拆箱
1,类型转换,C#有两种转化方式,隐式转换和显式转换 只要能保证值不会发生任何变化转换就可以自动进行。 这里很重要一点就是要保证数据没有丢失,只要没有丢失,编译器就可以执行下去 ①隐式转换byte value1 = 10;byte value2 = 255;byte total;total = value1 + value2; 1byte最多表示原创 2009-12-16 06:36:00 · 2329 阅读 · 0 评论 -
C#=> 不常用的运算符
虽然是不常用,但还是要知道地。要说这也算未雨绸缪了,O(∩_∩)O哈哈~ 1,::命名空间别名限定符 (名字太生硬,看例子)//命名空间名称较复杂 (单纯的例子,所以内容为空)namespace MySpace.Class.ChildClass{ class ClassA { }} 可以像下面这样对命名空间引用(定义别名)us原创 2009-12-14 22:41:00 · 647 阅读 · 0 评论 -
C#==>相等
比较方法的方法一共有4种1, ReferenceEquals() 是一个静态方法,两个object型参数,该方法测试两个引用是否指向同一个实例,该方法不能重写 对引用类型来说,该方法直接测试两个引用类型是否指向相同的内存地址。对值类型来说,该方法在使用中会对值类型首先进行装箱,即为值类型创建一个临时的引用类型 ,这样导致值类型的比较结果往往等不到我们所预期的,所以该方法一般并不适原创 2009-12-17 06:42:00 · 634 阅读 · 0 评论 -
C#==>多线程的文档列队模型
通常处理各种这几种任务,比如排队系统,打印列队,处理请求都需要用使用到列队FIFO,即先进先出 下面这个类子模拟了在多线程环境下的对文档的操作,这里打印文档的标题,现实中还可以对文档进行各种处理 1,文档类 /// /// 文档类,包含标题和内容两个属性 /// public class Document {原创 2010-02-18 21:44:00 · 1507 阅读 · 0 评论 -
C#==>运算符重载
1,在类中我们不能总是调用方法和属性,有时还需要一些其他工作, 例如 if(a==b)对于这个语句,在默认情况下会比较引用a和b,检测这两个引用是否指向内存中同一个地址,而不是检测两个实例是否包含同样的数值,所以需要们来告诉编译器如果处理==的操作,就是运算符的重载。 2,常用的【+, -, *, /, %, ++, --, &, |, >, !, ~】必须成对重载的【==,原创 2009-12-26 10:47:00 · 897 阅读 · 0 评论 -
C#==>用户定义类(或结构)的类型转换
1,对于我们自己定义的数据类型,我们需要做某些工作才能支持在自己的数据类型之间进行类型转换,有些像运算符的重载。这就是用户定义的数据类型的转换 2,有两个原则①,如果某个类直接或间接继承了另一个类,就不能定义这两个类之间的数据类型转换②,数据类型转换必须在源或目标数据类型的内部定义 3,如果数据类型转换声明为隐式的,编译器就可以隐式或显式地使用这个转换,如果声明为显式,原创 2009-12-26 22:04:00 · 1820 阅读 · 0 评论 -
C#==>委托
1,.NET的委托实际上是实现了函数指针的概念。比如C或者C++对于windows API中的回调函数的使用实际上就是方法调用的指针。 VB 中的AddressOf关键字也实现了该功能。 2,当我们把方法传递给其他方法时,需要使用委托。 需要用到方法作为参数传递的几个实例: ①,启动线程。Thread类的构造函数 ②,事件。事件发生时,把处理时间的方法原创 2010-01-05 07:25:00 · 740 阅读 · 3 评论 -
C#==>多播委托
namespace 多播委托{ /* * 以下的实例是一个关于多播委托的实例 * 多播委托应注意: * ① 委托可以包含多个方法,成为多播委托 * ② 因为要返回多个方法,所以委托的签名就必须返回void * ③ 多播委托的方法链的的顺序未经严格定义,所以避免使用任何依赖调用顺序的委托 * ④ 经过定义的多播委托原创 2010-01-07 21:37:00 · 1874 阅读 · 4 评论 -
C#==>匿名方法
1,匿名方法C#为委托提供一种机制,可以为委托定义匿名方法,匿名方法没有名称,编译器会定指定一个名称匿名方法中不能使用跳转语句跳转到该匿名方法的外部,也不能跳转到该方法的内部。也不能在匿名方法外部使用的ref和out参数 //用匿名方法定义委托 class Program { delegate string MyDelagate(stri原创 2010-01-08 22:35:00 · 23084 阅读 · 2 评论 -
C#==>事件和委托的实例
一个关于委托和事件的实例, 首先定义了一个员工类,当这个员工下班的时候会自动通知他的经理,并通知时间管理机能来记录下班时间, 同时,继承了一个消息类,用来记录我们自定义的内容: 给经理的留言 下班的时间 Worker.cs 员工类 /// /// 工人类 /// class Worker原创 2010-01-14 23:07:00 · 678 阅读 · 0 评论 -
C#==> 列表( List, ArrayList。。。)
1,C#中的列表主要有List 和 ArrayList 二者区别主要List支持泛型,ArrayList将Object对象作为其元素。 参看【 C# 泛型集合List和非泛型集合ArrayList的性能比较】 2,列表类型 初始化创建一个空列表(如果没指定容量)。当元素添加到列表后,列表容量会扩大4个元素,如果再添加到第5个元素列表就会扩大到8,添加到9的话,扩大到16,以此类原创 2010-02-08 21:45:00 · 8975 阅读 · 2 评论 -
C#==>关于List的一些用法的总结
Racer 参赛选手类 [Serializable] public class Racer : IComparable, IFormattable { public Racer() : this(string.Empty, string.Empty, string.Empty) { } public R原创 2010-02-09 22:50:00 · 1333 阅读 · 0 评论 -
C#==> 泛型类的几点特性
1,需要为泛型类定义约束 为泛型类定义约束的作用,实际上就是指定泛型类型应该符合某种规范使用where关键字定义 如下public class MyClass where TMyTemp : IMyInface{ ... ...}包含where关键字的约束,代表泛型TMyTemp必须要实现对接口IMyInface 这里的TMyT原创 2010-02-03 21:29:00 · 706 阅读 · 0 评论 -
C#==>泛型
1,除泛型之外,C#中如果在编译期间无法确认类型,就要使用Object类,但Object类是有问题的, ①Object类没有类型安全(即编译过程中无法判断类型转换的合法性),必须进行强制类型转换 ②Object类在与值类型惊醒转换的过程中,会有性能损失 2,使用泛型,(Framework2.0之后提供)。泛型可以保证类型安全,因为编译器会用特定的类进行替换 如:原创 2010-01-27 07:02:00 · 645 阅读 · 0 评论 -
C#类==>属性
1,属性是C#从VB提取的,而不是C++或者JAVA。 2,在语法上更像是调用了一个字段,但实际上是调用了属性访问器。包括 get访问器和set访问器 3,set访问器不指定参数,但编译器会假定一个参数value. 4,VB6程序员注意:C#不区分Set和Let,总是用set. 5,属性的只读与只写 在属性中省略set访问器,就可以创建只读属性原创 2009-12-01 21:32:00 · 1835 阅读 · 0 评论 -
C#的类
1,结构和类的区别在于:存储方式不同 类=》托管堆 结构=》堆栈 对于较小的数据类型,可以考虑用结构提高性能,需要注意结构不支持继承 2,事件也是类的成员, 数据成员:字段,常量,事件 函数成员:方法,属性,构造函数,终结器,运算符,索引器 3,字符串 字符串是不同与一般的引用类型的,因为字符串是不能改变的,(如果改变就创建全原创 2009-11-30 23:05:00 · 626 阅读 · 5 评论 -
C#==>只读字段
1,const定义是常量,其概念就是包含一个不能修改的值,而只读字段是在运行之前是未知的,但定义之后值不能改变。 2,只读字段,只可以在构造函数中对只读字段赋值。 3,静态的只读字段只能在静态构造函数中定义。 4,非静态制度字段,每一个实例都会有不同的值。 5,只读字段和常量都不需要设置为私有,因为我们不能在外部修改它们。 6,如果不在构造函数中赋值,那么制原创 2009-12-02 22:31:00 · 920 阅读 · 0 评论 -
C#==>匿名类型
var 关键字,与new关键字一起使用可以创建匿名类型。如namespace 匿名类型{ class A { public string AA { get; set; } public string BB { get; set; } } class Program { static void Main(string原创 2009-12-03 21:30:00 · 811 阅读 · 3 评论 -
C#类==>构造函数
1,如果没有提供构造函数,编译器会在后台创建一个默认的构造函数,这是一个非常基本的构造函数,只能把成员字段初始化为标准默认值。 2,C#中的基本字段都在默认情况下初始化为0,而C++中的基本字段不进行初始化,不需要像C++那样频繁的编写构造函数。 3,可以为构造函数提供任意多的重载,但如果提供了构造函数,编译器就不会自动提供默认的构造函数,这时使用无参数的构造函数实例化对象会报错。原创 2009-12-02 21:17:00 · 685 阅读 · 0 评论 -
C#==>结构
1,类保存在堆中,这种方式可以保证出具的数据在生存周期上的灵活性,性能虽然有一些损失,但由于托管堆的优化,损失是比较小的。但有时我们仅需要一个比较小的数据结构,这时可以考虑使用结构如 class windowForm { public int Left; public int Right; } 这样一类,只有两个存储项,只原创 2009-12-03 21:44:00 · 538 阅读 · 2 评论 -
C#==>抽象类和抽象函数
1,C#中使用abstract关键字,将类和函数声明为抽象类。 2,抽象类不能实例化,抽象函数没有执行代码,必须在非抽象类中重写。 注意抽象函数没有执行代码,并不是抽象类没有执行代码见下抽象类, 用于演示,没有实际意义 abstract class baseClass { private int a; public b原创 2009-12-07 21:48:00 · 2516 阅读 · 5 评论 -
C#==>密封类,密封方法
1,使用关键字sealed,声明的类不能继承,声明的方法不能重写。相当于Java中的final关键字。 2,定义如下 ① 密封类的定义 sealed class myClass { } //下面的定义在编译时会报错 class myChildClass : myClass { }原创 2009-12-07 22:00:00 · 1214 阅读 · 5 评论 -
C#==>扩展方法
1,如果在某些情况下,我们不能改动类的源码,这时如果要想给对象添加功能的话,就要使用扩展方法 2,扩展方法是静态的。 3,扩展方法中,可以访问多扩展类型中,所有公共方法和属性。 4,如果扩展方法与类中的方法同名,那么扩展方法就不被调用,已有的方法优先。 5,如下类 已有类ClassA,现要为它加一个方法FunctionBnamespace Object原创 2009-12-06 09:58:00 · 609 阅读 · 3 评论 -
C#==>虚方法
1,关键字virtual,可以把一个基类函数声明为虚方法。public virtualvoid myVirtualMethod(){} 2,也可以把属性声明为virtual public virtual int iCount { get; set; } 3,虚函数可以在派生类中重写。使用关键字override 。 4,Java中,所有函数都是虚拟的,但C#不同原创 2009-12-06 23:22:00 · 689 阅读 · 0 评论 -
C#==>Object类
1,NET类都派生于System.Object,没有指明继承情况下,编译器会自动假定,这个类派生于Object。实际上这个派生是间接的,首先派生于System.ValueType,System.ValueType派生于Object 2,其重要性在于除了访问自己定义的方法和属性外,还可以访问Object定义公共或受保护的成员方法。 3,Object类的方法, ToStri原创 2009-12-04 21:14:00 · 978 阅读 · 3 评论 -
C#==>继承
1,C#分为实现继承和接口继承两种继承方式。 2,使健壮代码的编写容易一些,是开发C#的重要设计目标,因此C#不支持多重实现继承,但C# 允许类型派生于多个接口, 3,结构和类关于继承的总结 ① 结构总是派生于System.ValueType,它们还可以派生于任意多个接口 ② 类总是派生于用户选择的另一个类,他们还可以派生于任意多个接口 4,下面三段原创 2009-12-06 22:36:00 · 512 阅读 · 0 评论 -
C#==>派生类的构造函数
1,在使用构造函数的时候,作为派生类会有某些特殊问题。其根源就是创建派生类的时候会有多个构造函数起作用。 2,C#中实例化的类的构造函数本身不能初始化类,还必须调用基类的构造函数。 3,构造函数的调用顺序是自上向下的,(实际上是编译器先自下而上的寻找构造函数,然后再自上而下的执行)直到达到要实例化的类为止,在此过程中,每一个构造函数都初始化它们自己的类中的字段。 用一原创 2009-12-08 21:04:00 · 1055 阅读 · 0 评论 -
.NET 关于类型转换的是是非非
<br />一,AS 和 IS 在程序中的安全使用<br /> <br />使用is<br /> <br /> class ClsHello { internal string Hello = "Hello!"; } class Program { static void Main(string[] args) { object hello = new ClsHello();原创 2010-11-26 10:04:00 · 766 阅读 · 0 评论