C#笔记
1.C#集合类
非泛型集合类泛型集合类
ArrayList List
HashTable Dictionary
Queue Queue
Stack Stack
SortedList SortedList
命名空间:System.Collections
ArrayList
ArrayList表示对象的无序非泛型集合。元素可为null,可重复。
HashTable
HashTable表示键/值对的无序非泛型集合。键不可为null,不可重复,添加重复键会抛异常。值可为null。
SortedList
SortedList表示键/值对的有序非泛型集合。键不可为null,不可重复,添加重复键会抛异常。值可为null。
Queue
Queue表示对象的先进先出非泛型集合。元素可为null,可重复。
Stack
Stack表示对象的后进先出非泛型集合。元素可为null,可重复。
命名空间:System.Collections.Generic
List<T>
List<T>表示对象的无序泛型集合。元素若为引用类型,可为null,可重复。sortedlist
Dictionary<TKey,TValue>
Dictionary<TKey,TValue>表示键/值对的无序泛型集合。键不可为null,不可重复,添加重复键会抛异常。值若为引用类型,可为null。
SortedList<TKey,TValue>
SortedList<TKey,TValue>表示键/值对的有序泛型集合。键不可为null,不可重复,添加重复键会抛异常。值若为引用类型,可为null。
Queue<T>
Queue<T>表示对象的先进先出泛型集合。元素若为引用类型,可为null,可重复。
Stack<T>
Stack<T>表示对象的后进先出泛型集合。元素若为引用类型,可为null,可重复。HashSet<T>
HashSet<T>表示对象的无序泛型集合。元素若为引用类型,可为null,不可重复,添加重复值不抛异常,
但返回false。
LinkedList<T>
LinkedList<T>表示对象的无序泛型双向链表。元素若为引用类型,可为null,可重复。SortedDictionary<TKey,TValue>
SortedDictionary<TKey,TValue>表示键/值对的有序泛型集合。键不可为null,不可重复,添加重复键会抛异常。值若为引用类型,可为null。
注:SortedList<TKey,TValue>与SortedDictionary<TKey,TValue>的区别:
1.SortedList使用的内存比SortedDictionary少。
2.SortedDictionary对未排序的数据执行更快的插入和移除操作。
3.SortedList对已排序的数据执行更快的插入和移除操作。
2.C#访问权限修饰符
类的访问权限(默认是internal):
1.public class:任何地方该类都可以被访问到。
2.internal class:只有在同一程序集内,该类才可以被访问到(你可以这样理解:如果你建立了一个解决方案,里面有三个项目,那么就有三个程序集,如果你把第一个项目里的一个类设置为internal class,那么第二个项目想调用这个类是不可能的,因为不在同一个程序集中)。
3.除非是嵌套类,否则类的访问修饰符不能为private、protected、protected internal。
类成员
类成员的访问权限(默认是private),如下图:
1.public:公开,类及类成员的修饰符,对访问成员没有级别限制。
2.private:私有,类成员的修饰符,只能在类的内部访问。
3.protected:受保护的,类成员的修饰符,只能在该类和该类的派生类中访问,不管该派生类和基类是否在同一程序集中。
4.internal:内部的,类及类成员的修饰符,仅限于程序集中。
5.protected internal:受保护的内部,如果是继承关系,无论是不是在同一个程序集里都可以访问,如果不是继承关系,只能在同一个程序集中访问。
3.C#静态类
1.静态类是不能实例化的,直接使用它的属性与方法。
2.静态类中的所有成员必须是静态的。
3.静态类无法被继承
4.C#静态构造函数
1.静态构造函数不可继承。
2.静态构造函数可以用于静态类,也可用于非静态类。
3.静态构造函数无访问修饰符、无参数,只有一个static标志。
4.静态构造函数不可被直接调用,当创建类实例或引用任何静态成员之前,静态构造函数被自动执行,并且只执行一次。
5.C#嵌套类
1.嵌套类可以访问外部类的方法、属性、字段而不管访问修饰符的限制。
2.外部类只能够访问修饰符为嵌套类中public、internal的字段、方法、属性。
3.当外部程序代码要访问嵌套类的时候,必须引用外部类的名称加运算符“.”的方式。
4.嵌套类的访问修饰符可以是protected、internal、protected internal、public、private(默认是private)。
5.如果嵌套类是private或protected的,嵌套类对外部类以外的其它类是不可访问的,外部类和在外部类中的另一个嵌套类却可以访问它,但是无法使用它的private或protected成员。如果嵌套类中的成员设置为public或者internal,那么外部类和其它同一个外部类声明的嵌
套类可以访问嵌套类的这些成员,但这些成员对外部类以外的类依旧隐藏。
6.如果嵌套类是public或者internal的,那么它将和一个普通的类类似,其他类可以使用正常的使用它。此时外部类功能上类似一个命名空间,这也赋予类一些命名空间的功能。
7.外部类无法继承它自己声明的嵌套类,这会引发循环嵌套的错误。
6.C#抽象类
抽象成员一定在抽象类中,但是抽象类中可以没有抽象成员。
抽象类无法被实例化。
为了让继承的子类能够实现抽象方法,也就必须把抽象的成员定义成公有或受保护的成员。
7.C#密封类
密封类无法被继承,其他的用法和实例类基本一致。
8.C#编程杂记
Int32.TryParse的用法:
//result=false;rr=true
int i=0;
string s="4";
string t="4";
s=string.Empty;
bool result=Int32.TryParse(s,out i);
bool rr=Int32.TryParse(t,out i);
有关新建数组:
//22]=null
pointtest[]pp=new pointtest[23];
判断是否可以强制转换
//b=false
Form obj=null;
bool b=(obj is Form);
string.Empty等同于""。
缺少引用的原因:项目属性中的目标框架要与引用库的目标框架相同。
如果基类没有提供默认构造函数,派生类必须使用base显式调用基构造函数。
9.C#接口
1.接口本身不包含实现。
2.接口可由方法、属性、事件、索引器或这四种成员类型的任意组合构成。接口不能包含字段。接口成员一定是公共的。
3.类或结构可继承多个接口。
4.若要实现接口成员,类中的对应成员必须是公共的、非静态的,并且与接口成员具有相同的名称和签名。
5.接口可以继承其他接口。
6.基类可以使用虚拟成员实现接口成员;在这种情况下,继承接口的类可通过重写虚拟成员来更改接口行为。
7.继承接口的任何非抽象类型都必须实现接口的所有成员。