1.函数重载:函数名一样,参数不一样(类型.个数),与返回类型无关
2.使用StringBuilder可以执行字符串的操作,String可以用于存储字符串或显示最终结果
3.foreach遍历是只读的,不能改变数组及集合中的元素值
4.封装:类的成员,类的构造器,修饰符,静态
5.c#中数据成员:字段、常量、事件;非数据成员:索引器、运算符、构造函数、析构函数、属性
6.如果提供了带参数的构造函数,编译器就不会自动提供默认的构造函数,只有在没有定义任何构造函数时,编译器才会自动提供默认的构造函数
7.构造函数也可以定义为private或protected,这样不相关的类就不能访问他们
8.构造函数不使用public修饰情况
  1).类仅用作某些静态成员或属性的容器,因此永远不会实例化
  2).希望类仅通过调用某个静态成员函数来实例化(这就是所谓对象实例化的类代理方法)
9.编写静态构造函数的一个原因是,类有一些静态字段或属性,需要在第一次使用类之前,从外部源中初始化这些静态字段和属性
10..NET运行库没有确保静态构造函数什么时候执行,所以不要把要求在某个特定时刻(例如,加载程序及时)执行的代码放在静态构造函数中。在c#中,静态构造函数通常在第一次调用类的成员之前执行。
11.静态构造函数没有访问修饰符,其他c#代码从来不调用它,但在加载类型时,总是由.NET运行库调用它;静态构造函数只能访问类的静态成员
12.如果不在自己定义的类中重写ToString(),该类将只继承System.Object执行方式--显示类的名称
13.结构并不支持实现继承,但支持接口继承。
  1).结构总是派生于System.ValueType,它们还可以派生于任意多个接口
  2).类总是派生于用户选择的另一个类,它们还可以派生于任意多个接口
14.在方法上使用sealed关键字是没有意义的,除非该方法本身是某个基类上另一个方法的重写形式。如果定义一个新方法,但不想让别人重写它,首先就不要把它声明为virtual。
15.不能把类型定义为protected、private、protected internal,因为这些修饰符对于包含在命名空间中的类型来说是没有意义的。因此这些修饰符只能应用于成员。但是,可以用这些修饰符定义嵌套的类型,因为在这种情况下,类型也具有成员的状态。
16.一般情况下,接口中只能包含方法、属性、索引器和事件的声明。接口不能有构造函数或字段。在接口定义中还不允许声明成员上的修饰符。
17.Array类是一个抽象类,Clone()方法会创建一个新数组,而Copy()只是传送了阶数相同、有足够元素空间的已有数组。都是浅拷贝
18.rear始终指向要入队的元素。判断队空的条件:rear == front;判断队满的条件:(rear + 1)%maxsize == front 少用一个空间; 求循环队列中数据元素的个数:(rear - front + maxsize)%maxsize
19.可空类型修饰符使 C# 能够创建表示未定义值的值类型变量。可空类型可以表示基础类型的所有值,另外还可以表示 null 值。
20.1).System.Nullable<T> variable;2).T? variable T 是可空类型的基础类型。T 可以是包括 struct 在内的任何值类型;但不能是引用类型。
21.可空类型隐式转换为其他可空类型;非可空类型隐式转换为可空类型;可空类型不能隐式转换为非可空类型,此时必须进行显式转换。此时的可空类型不能为null
22.继承。当子类构造时如果没有标明base,则总是调用父类默认的无参构造函数,如果父类定义了有参的构造函数,此时必须显示定义其无参的构造函数,要不然其子类无法构造,出现编译时错误。
23.子类可以隐式转换成父类,父类不能转换成子类(或者说有时会失败)。子类重写父类方法,那么父类方法是虚方法或抽象方法或接口
24.方法覆盖(隐藏)和方法重写:返回类型一样;方法重载:与返回类型无关
25.删除与为委托增加方法一样,其实是创建了一个新的委托。如果在调用列表中的方法有多个实例,-=运算符将从列表最后开始搜索,并且移除第一个与方法匹配的实例。
26.如果委托有返回值并且在调用列表中有一个以上的方法,则
   1).调用列表中最后一个方法返回的值就是委托调用返回的值
   2).调用列表中所有其他方法的返回值都会被忽略
27.委托匿名方法省略参数列表,如delegate{},则要满足:
   1).委托的参数列表不包含任何out参数
   2).匿名方法不使用任何参数
  ***.事件是对委托的封装,以致外部不能直接使用
28.多态:多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作
29.static void Call(Animal a){ a.run();a.eat()}//run()是虚的
   Dog d = new Dog();
   Call(d);
   运行结果:"dog.run()","animal.eat()"
30.静态成员在静态内存中分配,栈内存中成员作用范围--函数执行完毕销亡。
31.静态方法中不能存在非静态成员原因:静态方法一直存在,而非静态成员只有实例化才能存在,当其未实例化时赋值、调用就会出错。
32.抽象类与一般的类一样(构造函数、字段等成员,但没有抽象字段),但不能实例化。抽象方法在子类中要重写(跟接口类似,但接口方法不能显示定义访问修饰符)
33.接口成员:方法、属性、索引器、事件,不能有字段。且成员不能实现
34.c#提供了5种泛型:类、结构、接口、委托、方法(只有方法是成员,其他是类型);共有5中类型的约束:类名、class(引用类型)、 strcut(值类型)、Interfacename(接口泛称)、new()
35.where子句可以多个,以任何次序列出。但where子句中的约束必须有特定的顺序:
   1).最多只能有一个主约束,如果有则必须放在第一位
   2).可以有任意多的Interfacename约束
   3).如果存在构造函数约束,则必须放在最后
36.操作系统会调度线程。线程有一个优先级、正在处理的程序的位置计数器、一个存储其本地变量的堆栈。每个线程都有自己的堆栈,但程序代码的内存和堆由一个进程的所有线程共享
37.异步方法调用的标准模式
   1).等待直到完成
   2).轮询
   3).回调
38.EndInvoke()方法会一直等待,直到委托完成其任务为止。如果不等待委托完成其任务就结束主线程,委托线程就会停止。
39.在默认情况下,用Thread类创建的线程是前台线程。线程池中的线程总是后台线程。
40.winform生命周期
   1).构造函数
   2).Load事件
   3).Shown事件
   4).Actiovated事件
   5).Deactived事件
   6).Closing事件
   7).Closed事件
   8).析构函数

 posted on 2010-05-09 12:48  H&M  阅读(262)  评论(0编辑  收藏  举报