深入.NET平台和C#编程_知识点总结

                             深入.NET平台和C#编程_知识点总结

                                                                                                                            作者:田超凡

版权所有,转载请注明原作者,仿冒侵权必究法律责任


一、深入.NET平台
1.NET核心组成部分:
公共语言运行时CLR:相当于托管代码的代理,提供了.NET程序运行时的环境
由两部分组成:
公共语言规范CLS:定义了.NET平台不同语言语法的兼容性规范问题
通用类型系统CTS:定义了.NET平台不同语言数据类型不同的问题

框架类库FCL:由封装好的多个类组成的类库,提供了各种.NET程序模块功能的访问的通用统一的接
口。
常用的类库有:
System.Data/System.Windows.Forms/System.IO/System.Collections.Generic/System.Drawing
类图:用来表示类的组成部分和类与类之间关系的图表

二、值类型和引用类型参数传递
数据类型从大的角度来说分为值类型和引用类型
常见值类型:基本数据类型\enum枚举\struct结构...  c d
常见引用类型:类\String\接口\数组\集合....

参数传递的方式有两种:
值方式传递(参数不用ref修饰):
值类型数据:值传递参数副本,不会改变参数原来的值。
引用类型数据:类似指针指向参数所在的内存地址,会保留参数更新后的值

引用方式传递(参数要用ref修饰):
值类型数据/引用类型数据:都要保留参数更新后的值


三、使用集合组织数据
集合:是用来存储一组相同数据类型数据的容器
集合类型:泛型集合和非泛型集合
常见非泛型集合:
ArrayList:存储方式类似于数组,可以索引访问集合元素
HashTable:哈希表存储结构,每个元素都是键值对,通过键获取值
常见泛型集合(限定集合中的数据类型,确保集合数据类型的安全):
List<T>:可以索引访问集合元素
Dictionary<K,V>:键值对访问集合元素,通过键获取值,K代表key表示键的数据类型,V表示value即值得数据类型
泛型:在定义时即限定了数据类型
泛型集合优点:
数据类型安全、性能高。。。

获取元素[index]下标或者[key]获取元素/添加元素add()/删除元素对象remove()/removeAt()根据索引删除,只适用于List<T>和ArrayList

四、深入类的方法
构造函数(构造方法):便于初始化对象
特点:
构造函数名和类名相同,没有返回值,不能加void,一般适用于初始化对象
方法重载:方法名相同,参数不同的方法,在同一个类中c
特点:
方法名相同
参数类型不同或参数数量不同
在同一个类中

对象交互:在面向对象的编程语言中,对象和对象之间相互独立,互不干涉,但是在一定外力的作用下,对象开始共同努力。
可以认为,方法的参数和方法的返回值都是对象和对象之间相互传递的消息

五、深入继承和多态
继承:继承就是根据一个已知类派生其他子类的过程,被继承的类被称为父类或基类,继承其他类的类被称为子类或派生类
实现继承的语法:
继承优点:代码复用,便于编码和维护
子类:父类
继承的特性:
继承具有传递性:A:B,B:C,则A:C
继承具有单根性:一个类只能有一个直接父类
子类可以继承父类的哪些东西?
只能继承父类的public\protected属性、方法,private成员不能继承,构造函数不能继承,只能调用
protected修饰符和base关键字
protected修饰符:受保护的,只能在当前类和当前类的子类中使用,其他地方不能访问
base关键字:当前类的直接父类对象的引用,可以调用父类的属性、方法、构造函数
语法:
base.属性名
base.方法名
子类构造函数:base(向父类构造函数传递的参数,不需要显示指定数据类型)
小结:常见访问修饰符的访问权限比较
private修饰符:只能在当前类使用,访问权限(范围)最小(限制的程度最强)
protected修饰符:只能在当前类和当前类的子类中使用
public修饰符:其他类都可以使用,访问权限(范围)最大(限制的最弱)
internal修饰符:只能在当前程序集/项目类使用

大小(作用范围)比较:
public>internal>protected>private

继承条件下构造函数的调用:
如果在子类构造函数中没有显示调用父类的构造函数,也没有显式调用当前子类的构造函数,
默认先调用父类的无参构造函数。
当在子类构造函数中显示调用了父类的带参构造函数,将不再调用父类的无参构造函数
系统默认会为每一个类分配默认的无参构造函数,当显式定义了构造函数,系统将不再分配默认的无参构造函数
密封类:使用sealed修饰,不能被继承的类

多态:从字面意义上来看,就是指多种形态,实际意义是指同一个方法作用与不同对象时,可以有不同的解释,产生不同的执行结果
实现多态的步骤:
1.继承是多态的前提,首先定义父类和子类的属性和方法
2.父类定义虚方法/抽象方法,子类重写父类方法
3.父类引用变量指向子类对象

虚方法:父类定义的一个具有默认实现的方法,必须有方法主体
访问修饰符 virtual 返回值类型 方法名(参数列表){
   //方法体
}

方法重写:子类对父类中定义的虚方法或抽象方法进行重新编写,实现方法重写必须确保:
子类重写的方法和父类被重写的方法必须定义保持一致(方法名、参数列表保持一致,返回值尽量保持一致,
特殊情况下子类重写的方法返回值可以是父类的某个子类类型)
语法:
访问修饰符 override 返回值类型 方法名(参数列表){
   //方法体
}

实现多态的应用:
1.父类作为方法形参实现多态
2.父类作为方法返回值实现多态
3.is操作符和as操作符:
is判断对象的实际类型,返回bool值
as用来进行类型转换,即使转换失败,不会报错,返回null
4.注意:父类引用变量指向子类对象时(将一个子类对象赋给一个父类变量时),
只能调用父类子类中同时定义的方法,不能调用子类特有的方法

六、深入理解多态
里氏替换原则:是软件程序设计遵循的基本原则。
定义:子类可以替换父类,并且能够在父类能够出现的任何位置,但是父类对象是不能替代子类对象的
,这种特性被称为里氏替换原则(“老鼠的儿子会打洞”)
抽象类和抽象方法:
一般需要将不允许被实例化(实例化没有实际意义)的父类定义为抽象类
一般需要将抽象类中没有默认实现的方法定义为抽象方法,也就没有方法体。
特点:
1.抽象类不能实例化 
2.抽象方法只有定义,没有具体实现
3.含有抽象方法的类必然是抽象类,但是抽象类中不一定全都是抽象方法,可以有其他方法如虚方法
4.子类继承抽象类,则必须实现抽象类中定义的所有抽象方法,否则该子类也应该定义为抽象类

对比一下虚方法和抽象方法:
虚方法必须有方法体,抽象方法没有方法体
抽象方法只能定义在抽象类中,虚方法可以定义在其他类中
抽象方法使用abstract修饰。虚方法使用virtual修饰

七、可扩展标记性语言XML
XML语言:全程Extensible Markup Language可扩展标记性语言,特点如下:
1.支持跨平台数据交互
2.用来结构化存储数据
3.严格区分大小写
4.语法类似html,但是有明显区别:区分大小写,htmlm描述数据,xml存储有价值的信息
5.xml节点必须成对出现

XML读取
XmlDocument document=new XmlDocument();
document.Load("xml文件名");
XmlNode node=document.DocumentElement;//获取根节点
foreach(XmlNode n in node.ChildNodes)
{
   ...
XmlNode对象的属性
Name节点名
InnerText节点文本值
ChildNodes子节点集合
}

静态类:
不能实例化,只能有静态成员

非静态类:
可以实例化,即可以有静态成员,也可以由非静态成员

静态成员:
静态属性(类属性)、静态方法(类方法),静态代码块
静态成员加载优先级最高,静态成员不属于某个具体实例,所在类的所有实例共享类中定义的静态成员
可以直接通过类名调用

非静态成员:
不用static修饰的成员,即实例成员

静态构造函数
只能初始化静态成员

非静态构造函数不用static修饰的

TreeView树状视图动态操作节点
添加
this.tv.Nodes.Add(TreeNode对象/文本字符串string);
移除
this.tv.SelectedNode.remove();

操作文本
this.tv.SelectedNode.Text="文本内容";

使用节点存储关键信息
this.tv.SelectedNode.Tag=目标对象


八。文件操作
步骤:
创建文件流、创建阅读器或写入器、执行读写操作、关闭阅读器或写入器、关闭文件流
FileStream  fs=new FileStream("文件路径",FileMode.Create/CreateNew/Append/Open/OpenOrCreate);
StreamReader sr=new StreamReader(fs);
sr.ReadLine();
sr.ReadToEnd();

StreamWriter writer=new StreamWriter("文件路径path");
writer.write(");
writer.writeLine();

sr.close();writer.close();
fs.close();


 

发布了119 篇原创文章 · 获赞 14 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/qq_30056341/article/details/105635106