一、框架
.NET Framework的两个主要组成:CLR,框架类库
公共语言运行时 (CLR) 和框架类库 (FCL)
CLR的两个主要组成:CLS,CTS
1、CTS (通用类型系统) :用于解决不同语言的数据类型不同的问题。
如: C#—int, 而VB—Integer,通过CTS都编译成Int32。
2、CLS (公共语言规范) :不用语言开发的托管代码,可以相互调用,即互操作性问题。
C#基本语法
关键字
(名称空间:在任何 C# 程序中的第一条语句都是:using System;
using 关键字用于在程序中包含命名空间。一个程序可以包含多个 using 语句。
类:class 关键字用于声明一个类。
接口:接口使用 interface 关键字声明,它与类的声明类似。接口声明默认是 public 的。下面是一个接口声明的实例:
interface IMyInterface
{
void MethodToImplement();
}
以上代码定义了接口 IMyInterface。通常接口命令以 I 字母开头
InterfaceImplementer 类实现了 IMyInterface 接口,接口的实现与类的继承语法格式类似:
class InterfaceImplementer : IMyInterface
继承接口后,我们需要实现接口的方法 MethodToImplement()
抽象类/方法:public abstract class
- 1、抽象类中的抽象属性和抽象方法必须是公有的,因此必须有public修饰符
- 2、子类必须override抽象类中的所有抽象属性和抽象方法,如果没有全部override,那么子类必须是抽象类
- 3、抽象类中可以有非抽象属性和非抽象方法,也可以是私有或者公有,但是如果是私有的话 子类就不能访问,无意义,所以一般情况下都设置为公有
- 4、有抽象方法或抽象属性的类一定是抽象类,抽象类中的属性或方法不一定都是抽象的
密封类:
① 密封类不能作为基类被继承,但它可以继承别的类或接口。
② 在密封类中不能声明受保护成员或虚成员,因为受保护成员只能从派生类进行访问,而虚成员只能在派生类中重写。
③ 由于密封类的不可继承性,因此密封类不能声明为抽象的,即sealed修饰符不能与abstract修饰符同时使用。
④并不是每个方法都可以声明为密封方法,密封方法只能用于对基类的虚方法进行实现,并提供具体的实现,所以,声明密封方法时,sealed修饰符总是和override修饰符同时使用。
虚方法:
- ①用virtual修饰
- ②要有方法体,哪怕是一个分号
- ③可以被子类override
- ④除了密封类都可以写
静态类:
- 1.存储在静态成员中的信息只有在应用程序退出的时候才会从内存里释放出来。
- 2.静态成员不能通过对象访问,只能通过类名直接访问。
- 3.静态成员(内容)在内存中只存储一份。
- 4.静态成员,在整个应用程序中任何一个地方都可以访问的到,所以静态成员直到程序退出后才会释放内存。而实例成员,当没有变量使用就可以被垃圾回收,回收后内存就释放了.(可以把一些常用的工具函数,封装到一个静态类中,使用方便)
结构:
- 结构可带有方法、字段、索引、属性、运算符方法和事件。
- 结构可定义构造函数,但不能定义析构函数。但是,您不能为结构定义无参构造函数。无参构造函数(默认)是自动定义的,且不能被改变。
- 与类不同,结构不能继承其他的结构或类。
- 结构不能作为其他结构或类的基础结构。
- 结构可实现一个或多个接口。
- 结构成员不能指定为 abstract、virtual 或 protected。
- 当您使用 New 操作符创建一个结构对象时,会调用适当的构造函数来创建结构。与类不同,结构可以不使用 New 操作符即可被实例化。
- 如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用。
重写:
- 要求:(三大同)参数相同,方法名相同,返回值相同
- 意义:增强类的重用性,扩展性,重写是对类中方法的扩充,重写继承用的是父类的东西,则不仅得到父类的特征,同时也加入了自己的东西
- 关键字:基类函数用virtual修饰,派生类用override修饰
- 注意:不能重写非虚方法或静态方法;
重载:
- 要求:在同一作用域,可以存在相同的函数名,不同参数列表的函数,这组函数称为重载函数
- 意义:减少函数的数量,避免命名的污染,可应对不同的需求,针对同一母的不同情况
访问修饰符:
- public :公有的,任何代码均可以访问,应用于所有类或成员;
- internal:内部的,只能在当前程序集中使用,应用于所有类或成员;
- protected internal:受保护的内部成员,当前程序集或派生自包含类的类型中使用,应用于内嵌类或成员;
- protected:受保护的,只能在当前类或其派生类中使用,应用于内嵌类或成员;
- private protected:私有受保护的成员,包含类或当前程序集中派生自包含类的类型使用,应用于内嵌类或成员;(C#7.2及更高版本中有效)
- private:私有的,只能在当前类中使用,应用于内嵌类或成员;
)
二、面向对象
类和对象的概念:
1.类的实例化,是由类具体化对象
2.类描述一组相似对象的共性
类的组成:
字段、属性(set访问器和get访问器)和方法
面向对象的三大特性
访问修饰符(private、public、protected)
静态方法和实例方法的区别:
重载:同一个类中添加几个名字相同,参数与返回值不同的方法
构造函数:
枚举:
结构的定义:
类和结构的异同点:
类图:
继承:
base关键字:
接口:
抽象类:
①抽象类不能被实例化 ②抽象类不能是密封(sealed)或静态(static)的
密封类的定义:通过在类定义前放置关键字sealed,可以将类声明为密封类。密封类是不能被继承的类,因此密封类不能作为基类,也不能是抽象类。
虚方法和抽象方法的定义与异同点:
接口与抽象类的异同点。
三、集合泛型
ArrayList:
List
HashTable:
Dictionary
ArrayList和List
HashTable和Dictionary
四、文件读写
步骤
FileMode.Open打开/Create新建(覆盖)/CreateNew新建新的文件(产生异常)/Append追加
文件访问FileAccess.Read(只读)/Write(只写)/ReadandWrite(读和写)
五、绘图
步骤:
窗体的Paint事件:
Load事件:
①该事件在窗口加载完毕后执行响应;②该事件订阅的函数在窗口创建完成后执行一次;③可以在与此事件定阅的函数中添加控件初始化,事件订阅等
Graphics:
Pen:
Brush对象:
六、ADO.NET
Connection:
Command
DataSet:
DataAdapter:
Connection打开关闭连接的方法
SqlConnection myConnection = new SqlConnection(connectionStr); myConnection.Open(); myConnection.Close()
Command执行数据库操作的三个方法
Command.ExecuteNonQuery()
Command.ExecuteScalar()
Command.ExecuteReader()
DataAdapter的Fill和Update:
四个Command对象SelectCommand:
七、委托与事件
委托定义的关键字:delegate 是一种可用于封装命名或匿名方法的引用类型
委托来调用对象方法的基本过程:
1、声明委托(定义一个方法的原型:返回值+方法名称+参数类型和个数)
public delegate int MyDelegate (string s);
2、根据委托定义的函数原型编写需要的方法(方法返回值类型一致,参数类型一致,参数个数一致)
private int content(string a)
{ }
3、委托在使用前必须实例化,实例化的时候需要指明默认的方法(关联具体方法)
MyDelegate mydelegate = new MyDelegate(content);
4、通过委托去调用方法,而不是直接调用方法
int a = mydelegate(b)
常见的事件参数(object sender, EventArgs e)
匿名方法:
- 五、 合成/聚合复用原则(CARP)
- 合成/聚合复用原则(Composite/Aggregate Reuse Principle或CARP)经常又叫做合成复用原则(Composite Reuse Principle或CRP),就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新对象通过向这些对象的委派达到复用已有功能的目的。
- 复用的种类:
(1)继承
① 优点:
新的实现较为容易,因为基类的大部分功能可以通过继承关系自动进入派生类;
修改或扩展继承而来的实现较为容易。
② 缺点:
继承复用破坏包装,因为继承将基类的实现细节暴露给派生类,这种复用也称为白箱复用;
如果基类的实现发生改变,那么派生类的实现也不得不发生改变;
从基类继承而来的实现是静态的,不可能在运行时发生改变,不够灵活。
- 复用的种类:
(2)合成聚合
① 优点:
新对象存取成分对象的唯一方法是通过成分对象的接口;
这种复用是黑箱复用,因为成分对象的内部细节是新对象所看不见的;
这种复用支持包装;
这种复用所需的依赖较少;
每一个新的类可以将焦点集中在一个任务上;
这种复用可以在运行时动态进行,新对象可以使用合成/聚合关系将新的责任委派到合适的对象。
② 缺点:
通过这种方式复用建造的系统会有较多的对象需要管理。
- 合成-聚合复用原则(CARP)是指,尽量使用合成/聚合,而不是使用继承。
在OOD中,有两种基本的办法可以实现复用,一种是通过合成/聚合,另外一种就是通过继承。
- 只有“Is-A”关系才符合继承关系,“Has-A”关系应当用聚合来描述。
- 只有两个类满足里氏代换原则的时候,才可能是“Is-A”关系。也就是说,如果两个类是“Has-A”关系,但是设计成了继承,那么肯定违反里氏代换原则。



