您的位置:首页 > 编程语言 > C#

C#高级编程技术知识点总结

2010-10-07 15:06 106 查看
C#高级编程技术知识点总结
1 .NET体系结构内容小结
1、什么是.NET框架?
.NET框架是.NET的基本体系结构和.NET平台的基础,该框架提供了具体的技术和服务。
2、NET Framework 的组件
l 公共语言运行库(CLR)
l .NET Framework 类库
l ADO.NET——数据和 XML
l XML Web Service
l Web 窗体和服务
两个核心(重要)组件包括:公共语言运行库(或CLR)和.NET Framework 类库
.NET Framework的核心:公共语言运行库
3、公共语言运行库的组成
n 类加载器:管理元数据、加载以及部署类
n MSIL到本机代码编译器:JIT(Just In Time)编译器将MSIL转换成本机代码
n 代码管理器:管理代码的执行
n 垃圾回收器:为.NET Framework下的所有对象提供自动生命期管理,即自动内存管理
n 安全引擎:通过用户标识和代码来源提供基于证据的安全机制
n 调试器:使开发人员可以调试应用程序并跟踪代码的执行
n 类型检查器:不允许不安全的类型转换和出现未初始化的变量,通过检验MSIL来确保类型安全
n 异常管理器:提供结构化的异常管理机制
n 线程支持:为需要多线程机制的应用程序提供多线程编程支持
n COM封送拆收器:提供与COM之间的封送转换
n .Net Framework类库支持:通过和运行时集成代码来支持Net Framework类库。
4、.NET Framework类库的作用和特点
作用:供.NET托管程序使用的类型集合
特点:是面向对象的、是安全且易于扩充、一致的编程接口、跨语言继承和调试、但是不容易学习和掌握
5、托管代码的定义
.NET Framework中将在公共语言运行库的控制下运行的代码称为托管代码。
2托管执行环境的介绍
1、编译和运行.NET Framework应用程序
编译器选项
l 当使用命令行开关/t:exe/t:winexe /t:library时,C#编译器的输出结果将是一个程序集。这三个命令行开关得到的文件分别控制台可执行文件windows可执行文件DLL文件
2、程序集的组成要素
l 程序集清单,包含程序集元数据。
l 类型元数据。
l 实现这些类型的Microsoft中间语言(MSIL)代码。
l 资源集。
在上面四个元素而言,只有程序集清单是必不可少的。
3、元数据的定义和作用
(1)定义:NET Framework中,元数据被称为“数据的数据”
(2)作用:加载和定位类、增强代码安全性、提供反射支持
4、我们可以使用ildasm.exe工具来查看PE文件中的元数据以及任何托管模块中的MSIL代码。
5、命名空间和程序集
(1)命名空间的特点
命名空间能嵌套另一个命名空间 、在不同命名空间中,类型可以具有相同的名字、一个命名空间能在多个文件中定义 、单独一个源代码文件能定义多个命名空间
(2)命名空间和程序集的关系
一个程序集可以引用多个命名空间,一个命名空间也可以保存在多个程序集中
3使用组件
1、在C#中,internal访问修饰符修饰的变量只能由当前程序集访问
2、当引用其他程序集时,应该使用/reference 或 /r编译开关选项
3、创建组件的方法
l 使用命名空间和声明类
l 创建类的实现(方法、属性和事件等)
l 实现结构化异常处理
l 编译组件(csc /out:组件名.dll /t:library xxxx.cs)
l 例如:实验二创建的组件
4部署与版本控制
1、版本号的构成(能区分版本号是否兼容)

2、部署弱名称程序集在应用程序的子目录中,在配置文件中用probing子元素的privatePath属性指定应用程序加载私有程序集的路径,配置文件名是应用程序全名称加“.config”
5对象和类型
1、类和结构
(1)给方法传递参数(引用传递和值传递)
引用传递参数:在变量通过引用传递给方法时,被调用的方法得到的就是这个变量,所以在方法内部对变量进行的任何改变在方法退出后仍旧发挥作用
值传递参数:如果变量是通过值传送给方法的,被调用的方法得到的是变量的一个副本,在方法退出后,对变量进行的修改会丢失
(2)两个变量赋值(值类型变量赋值和引用类型变量赋值)
赋值:值类型通过拷贝赋值,默认通过值来传递参数,除非用ref关键字;引用类型通过引用赋值,可能出现几个引用指向同一个对象,引用类型用引用来传递变量
(3)结构和类的区别:结构是一种值数据类型,而类是一种引用数据类型
(4) 属性的作用:提供了向外部对象和代码公开数据值的一种方便方法
(5) System 空间下包含的Object对象是所有.NET 类的隐含基类
2、类型的使用
(1)CTS架构(接口是惟一没有继承System. Object的类型 )

(2)Equals()方法
Equals( )方法
l Equals( )返回Boolean值,它指定两个对象实例是否相等
l 该方法有两种形式:静态方法和实例方法
说明:
对于值类型来说,Equals方法比较的是值;而对于引用类型来说,Equals方法比较的是引用,即对象在内存中的位置

7数组和集合
1、System.Collections命名空间

2、集合遍历的思想和方法
思想:可以使用IEnumerable.GetEnumerator来返回一个枚举数,然后用这个枚举数来遍历整个集合
具体方法:
protected void Print(System.Collections.集合类型 list)
{
IEnumerator enumerator=list.GetEnumerator();
while(enumerator.MoveNext())
{
Console.WriteLine((string)enumerator.Current);
}
}
3、Queue类和Stack类的常用方法和应用举例
Stack类常用的方法
方法
说明
Push
将指定元素插入集合顶部
Pop
返回并删除集合顶部元素
Peek
返回集合顶部元素,但不删除该元素
Stack类的特点:指定以后进先出的顺序来访问元素
Queue类常用的方法
方法
说明
Enqueue
将指定元素添加到集合的结尾
Dequeue
返回并删除集合开始处的元素
Peek
返回集合开始处的元素,但不删除该元素
Queue类的特点:指定以先进先出的顺序来访问元素
4、HashTable类和SortedList的常用方法和应用举例
(1) System.Collections命名空间中实现哈希算法的HashTable类
(2)HashTable类的作用 :应用key/value的对应关系,返回集合中的特定对象
说明:添加元素时,第一个参数是键,第二个参数是数据;删除元素时,参数是键而非数据
在Hashtable集合中,各个元素并不是按照添加的顺序存在于集合的内部的。在Hashtable集合中,key/value对根据键的哈希代码进行组织排序
(3) SortedList类是另外一种实现IDictionary的字典类型,除了与Hashtable同样可以经过key搜索集合中的对象外,它同时支持类似数组集合的索引搜索
说明
添加元素时,第一个参数是键,第二个参数是数据
mylist[]中的参数代表的是键
mylist.GetByIndex()中的参数代表的是索引
删除元素时,参数代表键值
在SortedList集合中,key/value按键排序并可按照键和索引访问
8委托和事件
1、委托的概念及定义

2、如何使用委托(委托的定义和使用,多播委托)
(1)委托的定义形式 <modifiers>delegate<return_type><delegate_name>(argument_list);
说明:
Ø 委托声明定义一个类型,该类型封装了一个有一系列参数和返回值的方法
Ø 声明委托类似于方法的定义,但没有方法体,定义的前面加上delegate关键字
Ø 定义委托基本上是定义一个新类,可以在定义类的任何地方定义委托,并可以使用访问修饰符
(2)委托的使用
// 声明一个委托,该委托拥有一个只有一个字符串类型的参数且没有返回值的方法
public delegate void Del(string message);
//定义预委托的方法,该方法可以是静态的和实例的,只要预委托方法与委托具有相同的签//名即可
Public void DelegateMethod(string message)//class Delclass
{System.Console.WriteLine(message);}
//将委托实例与预委托的方法相关联
Del handler=new Del(obj.DelegateMethod);

Del handler=obj.DelegateMethod;
//调用委托,在委托对象的名称后加上被小括号括起来的参数的方式来调用委托
Handler(Hello World);
(3)多播委托
事实上,委托不仅可以代表一个函数,还可以组合“一堆”函数,然后批量执行它们,这里体现了多播委托(委托链)的思想
利用+=向多播委托变量中增加委托方法、-=从多播委托变量中删除委托方法
3、如何使用事件(如何声明事件,事件中的运算符)
声明事件
.Net通过一个称作委托(Delegate)的技术来实现事,声明与事件关联的委托
声明事件:<modifier>event<event_type><event_name>;
说明:
事件声明与字段声明类似,但是事件声明必须使用event关键字
事件类型必须是委托类型,而且该委托类型必须至少具有和事件本身一样的可访问性
事件和方法一样具有签名,事件的签名通过事件类型中的委托类型来决定的
事件本质上相当于是一个委托变量。

9内存管理
1值数据类型和引用数据类型的内存布局
值类型的实例使用栈上的内存;而引用类型的实例则使用托管堆上的内存
2、.NET释放托管资源的方式:
(1)要求程序员编写托管程序时为对象分配内存,但在使用完毕后不必释放它
(2)另外我们也可以通过在程序中显式调用System.GC命名空间中的Collect方法,强制立即进行垃圾回收
3、释放未托管资源的方式
(1) 声明一个析构函数,但是析构函数的执行时间是不确定的,另外析构函数的执行会延迟对象最终从内存中删除的时间
(2) 在类中实现System.IDisposable接口中的Dispose方法
IDisposable接口可控制释放资源时间,但需要确保执行Dispose()方法
IDisposable接口支持显式资源管理
10文件与I/O流以及序列化
1、.NET以流的概念来处理IO的问题,相关的功能封装为类供应用程序引用。
2、所有与IO处理相关的类位于System.IO命名空间,包括:FileStream 、MemoryStream 和BufferedStream类
注意:NetworkStream类位于System.Net.Sockets命名空间中
3、使用FileStream打开一个文件时,FileMode参数可设置对文件覆盖、创建、打开等选项中的操作:
Create:指定创建一个新文件,如果已经存在一个同名文件,则旧文件被覆盖
CreateNew:定创建一个新文件并防止覆盖已存在的同名文件
4、定义一个可以被序列化的类的步骤
通过[Serializable]特性将该类标注为可被序列化的类,如果不想序列化类的某个字段时,可以在其前面加上[NonSerialized]特性
5、使一个类实现自定义的序列化的步骤
(1)类应该继承自Iserializable接口
(2)实现接口的GetObjectData方法
(3)并提供一个带 SerializationInfo和StreamingContext 参数的构造函数
11线程
1、线程对象的创建和启动
线程由Thread类创建的对象代表,Thread类构造函数的参数是一个ThreadStart委托类型的参数 ;当线程对象创建以后,调用Start()方法将其启动
举例:
Class MyThread
{
//静态线程函数
public static void ThreadMethod1()
{ }
//实例线程函数
public void ThreadMethod2()
{ }
}
//将静态函数当作线程函数
Thread th1=new Thread(new ThreadStart(MyThread.ThreadMethod1));
//将实例方法当作线程函数
MyThread obj=new MyThread();
Thread th2=new Thread(new ThreadStart(obj.ThreadMethod2));
//当线程对象创建以后,调用Start()方法将其启动
th1.Start();
th2.Start();
2、背景线程
IsBackground属性为true的线程被称为“背景线程”。
3、线程优先级
线程优先级,由Thread类的Priority属性标识。
4、线程同步
使用Monitor类控制线程同步时,用Monitor.Enter方法在指定对象上获取排他锁。
12访问Internet
1、端口号的取值范围:0~65535
2、TCP和UDP协议的区别
(1)TCP是一种面向连接,保证可靠传输的协议
(2)UDP是一种无连接的协议,由于没有连接,也就不能保证服务器能接收到数据,但整体效果是传输比较快。
3、套接字的作用
套接字是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元
4、TcpClient类建立客户端程序的流程以及应用

5、TcpListener类建立服务器端程序的流程以及应用

6、WebRequest类的常用方法
Create()——初始化一个新创建的WebRequest实例
Public static WebRequest Create(string strUriString)
13远程处理和XML Web Service
1、信道和格式化程序
(1) 在.NET远程处理框架中,HTTP信道的默认格式化程序为SoapFormatter
(2) 在.NET远程处理框架中,TCP信道的默认格式化程序为BinaryFormatter
2、服务器端激活模式下服务器端应用程序开发


创建一个可以被远程访问的类


选择并注册信道
TcpChannel channel=new TcpChannel(12345);
ChannelServices.RegisterChannel(channel);


使用服务器端激活方式注册对象
RemotingConfiguration.RegisterWellKnownServiceType(typeof(Remot.HelloServer),
"HelloWorld", WellKnownObjectMode.SingleCall);

3、服务器端激活模式下客户端应用程序的开发


选择并注册信道
TcpChannel channel=new TcpChannel();
ChannelServices.RegisterChannel(channel);


获得远程对象
HelloServer obj = (HelloServer)Activator.GetObject(typeof(Remot.HelloServer),
"tcp://localhost:12345/HelloWorld");


调用远程对象的方法
4、创建XML Web Service
(1) soap协议规定了Web Services之间传递信息的方式。
(2)在Web服务项目的Web服务类定义中,某方法具有[WebMethod]特性,则该方法可以作为Web服务的一部分而被访问。
(3) 在使用ASP.NET开发的WEB服务时,WEB服务类必须派生自System.Web.Services.WebService
15 .NET数据访问及创建Windows应用程序
1、ADO.NET架构的两个主要组件是Data Provider和DataSet。
2、在ADO.NET开发中,常用对象的作用
(1)Connection对象进行数据库连接
(2)DataAdapter对象在数据集和数据库之间移动记录
(3)Command对象用来包含提交给数据库的信息。
(4)可使用DataReader和DataSet来从数据库中取得数据
3、Fill方法可以将一个查询的结果填充到DataSet中
4、System.Windows.Forms命名空间中包含创建Windows窗体应用程序的类
5、常用控件的用法
(1)Label控件用来显示用户不可编辑的静态文本信息
(2)在RadioButton控件的事件中,当Checked属性的值更改时CheckChanged事件会发生。
(3) GroupBox和Panel控件都是容器控件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: