.NET概念总结
1.NET Frameword .NET框架
2.CLR 公共语言运行时
3.MSIL 微软中间语言
4.CLS 公共语言规范
5.CTS 通用类型系统
.NET框架具有两个主要组件组成:公共语言运行时和框架类库。公共语言运行时是.NET框架的基础。框架类库是一个综合性的面向对象的可重用类型集合,利用它可以开发包括传统命令或者WinForms应用程序到基于ASP.NET所提供的最新应用程序。
1. System:“树”的根,此命名空间包含.NET框架类库中的其他所有命名空间。
2. System.Da
3. System.Windows.Forms用于开发Windows应用程序,引入这个命名空间才能使用WinForms的控件和各种特性,例如我们曾使用的MessageBox,必须引入这个命名空间
4. System.Collections.Generic可以使用泛型。
5. System.Net可以对网络协议进行编程。
6. System.Security提供系统的安全控制功能。
7. CLR是所有.NET应用程序运行时的环境,是所有的.NET应用程序都要使用的编程基础。
8. CLR中有两个主要组件,CTS是通用类型系统,CLS是公共语言规范。
9. 命名空间用于组织类和其他内容提供一个逻辑上的层次结构。
类:
面向对象中的类描述了一组相似对象的共同特性,是具有相同特征和共同行为的一组对象的集合。
类的属性:
对象所拥有的特征,在类中表示时称为类的属性。
类的方法:
对象执行的操作称为类的方法。
类和对象的关系:
1. 由对象归纳为类,是归纳对象共性的过程。
2. 在类的基础上,将状态和行为实体化为对象的过程称为实例化。
定义类中的成员时,如果不写访问修饰符,则默认是:private
定义一个类不写访问修饰符,怎默认是 internal
只读属性,只包含get访问器 ;只写属性,只包含set访问器 ;读写属性,包含get和set
封装的好处:
1. 避免使用非法数据赋值 2.保证数据的完整性 3.避免类内部发生修改,导致整个程序的修改。
方法重载:
类中两个以上的方法,取的名字相同,只要使用的参数类型或者参数个数不同
C#属性可以利用get取得字段的值,set可以设置字段的值,在访问器中可以对数据进行约束
静态方法 |
实例方法 |
Static关键字 |
不需要static关键字 |
类名调用 |
实例对象调用 |
可以访问静态成员 |
可以直接访问静态成员 |
不可以直接访问实例成员 |
可以直接访问实例成员 |
不能直接调用实例方法 |
可以直接调用实例方法和静态方法 |
调用前初始化 |
实例化对象时初始化 |
使用构造函数请注意以下几个问题:
1. 一个类的构造函数名通常与类名相同。
2. 构造函数没有返回值。
3. 一般情况下,构造函数总是public类型的。
4. 在构造函数中不要对类的示例做初始化以外的事情。不要尝试显示的调用构造函数,也就是直接去调用。
enum:定义枚举类型的关键字 struct:定义结构类型的关键字 gender:性别
enum它表示一组有限的值,对可能的值进行约束。
例如:
public enum Genders
{ 定义一个枚举
Mail, Female
}
private Genders gender;
public Genders Gender
{
get{return gender;}
|
类 |
结 构 |
不同点 |
引用类型 |
值类型 |
可以被继承 |
不能被继承 | |
可以有默认构造函数 |
不可以有默认构造函数 | |
可以添加无参的构造函数 |
可以添加构造函数,但他们必须带参数 | |
创建对象必须使用new |
创建对象可以不用new | |
结构中给字段赋值是错误的 |
类中可以给字段赋值 | |
相同点 |
都可以包含字段、方法 | |
都可以实现接口 |
set{gender=value;}
}
使用枚举好处:
1. 枚举可以使代码更易于维护,有助于确保给变量指定合法的、期望的值。
2. 枚举使代码更清晰,允许描述性的名称表示数据,使用时直观方便。
把值类型转换成引用类型的过程称为装箱,反过来由引用类型转换为值类型称为拆箱。
值类型:int、long、float、char、bool、enum、struct
引用类型:基类(System.Object)string、class、interface、int[],string[]
Hashtable 哈希表 collections 收集、采集 generic 总称的
使用ArrayList、Hashtable时需引用 using System.Colletions
定义一个List<T>泛型集合的方法如下:
1.List<Student> students = new List<Student>();
“<T>”中的T可以对集合的元素类型进行约束,T表明集合中管理的元素类型。
定义一个Dictionary<K,V>泛型集合的方法如下:
2.Dictionary<String,Student> students = new Dictionary<String,Student>();
<K,V>中的K表示集合中的Key的类型,V表示Value的类型
泛型的重要性主要体现在以下几点:
1. 解决了很多繁琐的操作问题,例如传统的集合中获取元素需要大量的类型转换,不易控制程序的异常,而泛型集合无须这些类型的转换,使我们编程更加便捷。
2. 提供了更好的类型安全性,在实际练习中,我们能体会到,泛型对于类型的约束十分严格,它可以控制我们在集合中对于不同类型的对象的胡乱使用,从而保证程序类型的安全。
3. CLR可以支持泛型,这样使得整个.NET平台都能够使用泛型。
泛型集合可以作为类中的一个属性,使用泛型集合必须实例化。
C#中Main()方法有4种形式:
1.static void Main(string[]args){} 2. static int Main(string[]args)[]
3.static void Main(){} 4. static int Main(){}
修 饰 符 |
类 内 部 |
子 类 |
其 他 类 |
public |
可以 |
可以 |
可以 |
private |
可以 |
不可以 |
不可以 |
protected |
可以 |
可以 |
不可以 |
继承的价值
1. 继承模拟了现实世界的关系,OOP中强调一切皆对象,这符合我们面向对象编程的思考方向。
2. 继承实现了代码的重用,合理地使用继承,会使我们的代码更加简洁。
3. 继承使得程序结构清晰,子类和父类的层次结构清晰,最终的目的是使子类只关注子类的相关行为和状
态,无须关注父类的行为与状态。例如,学员只需要管理学号、爱好、这种属性,而公共的姓名、年龄、性别
属性交给父类管理。
(一) 继承必须符合 is a 的关系,被继承的类称为父类或者基类,继承其他类的类称为子类或者派生类。
(二) 继承机制很好地解决了代码复用的问题。
(三) 子类继承父类的成员,并且可以拥有自己特有的成员。
(四) 被protected访问修饰符修饰的成员允许被其子类访问,而不允许其他非子类访问。
(五) Base关键字可以用于调用父类的属性、方法、构造函数。
(六) 继承具有传递性,如果classA:B; classB:C,则A也可以访问C的成员。
(七) C#中的继承具有但根性,一个类不能够同时继承自多个父类。
(八) 被sealed关键字修饰的类称为密封类,密封类不能被继承。
(九) 在子类中,如果不使用base关键字来显示调用基类构造函数,则将隐式调用默认的构造函数
(十)使用子类构造函数的每种情况必须明确声明,而不能期望自动调用父类对应版本的构造函数。
Virtual 虚拟的 override 撤销推翻 abstract 抽象的
委托:
委托是对方法的引用,C#中的委托同时也是类型安全的。
委托要求方法的实现和委托必须具有相同的参数类型,即相同参数个数和相同数据类型。
委托定义就是定义一个封装特定参数类型和返回值类型的方法体(静态方法或实例方法)的数据类型。其语法为:
[访问修饰符] delegate 数据类型 委托名(参数列表)
(一) 多态是指两个或多个属于不同类的对象,对于同一个消息(方法调用)作出不同响应的行为方式。
(一)使用抽象方法和虚方法都可以实现多态性。
(二)抽象方法是一个未实现的方法,它用abstract关键字修饰,含有抽象方法的类必然是抽象类。
(三)面向对象的三大特性是 封装、继承、多态。
抽象类与接口
没有实现的方法称为抽象方法,包含抽象方法的类称为抽象类。如果一个抽象类中的方法
都是抽象的,则可以定义成接口,接口本身不提供它所定义的成员的实现。
抽象类是派生类的基础。通过不实现或部分实现,这些抽象类用于创建模板,以派生出其他类型。如果要将一个类指定为抽象类,则必须使用abstract 关键字,声明抽象方法和抽象类语法如下:
abstract class 类名
{
[访问修饰符] abstract 返回类型 抽象方法名(参数列表);
类的其它内容;
}
派生类如果要实现基类的抽象方法,必须使用override 关键字
抽象类不能实例化对象
接口定义了其派生类要实现的一系列方法,而它自己并不能实现这些方法,一旦定义了一个接口,许多类都可以实现它,而且一个类可以同时实现多个接口,接口不能实例化。
[访问修饰符] interface 接口名
{
//接口的主体,一般为抽象方法
}
C#面向对象只允许同时继承一个类,但可以同时实现多个接口。
当一个类既继承另一个类,又实现多个接口时,冒号后面首先是 基类,然后是接口,接口之间没有次序要求