C#的学习笔记(一)

1.静态构造函数不允许有参数,同时静态构造函数,只有一个线程能访问,保证了多线程下的正确性.
2.在webForm的PageLoad事件中,加入this.SmartNavigate=true;即可使页面不刷新.
3.子类中可以和基类定义相同的virtual方法,但是必须用new关键字.
4.属性(Attribute)与映射(Reflection)均是用以处理元数据(metadata)的机制.
5.组件是.Net应用程序的最基本的单位,一个组件相当于一个可执行程序(exe)或者一个动态连接库(dll).
6.属性用途很广,除了将单的记录应用程序相关信息,如:类,方法,字段与结构,版本,作者,更新记录等等,较高级一些内容,如支持序列化,定义安

全,与COM沟通等相关工作,也可以用属性来完成.
7.AttributeUsage属性类最主要的功能,在于让你指定自定义属性所能应用的类成员项目,通常在自定义属性类一开始声明前,必须声明这个属性

类,并且指定属性被允许套用于应用程序内部的何种成员,构造函数如下:  AttributeUsage(AttributeTargets attItem) attItem是个枚举.
8.映射是一种非常强大的功能,允许程序开发人员,自行编写程序代码将加入的信息从元数据取出,在执行期查看元数据,探索类内容,支持晚期绑

定,甚至动态创建类型,甚至你可以利用映射的机制,制作自定义的功能,提供类型查看工具.
9.Type类型派生于MemberInfo,一位于System.Reflection命名空间的抽象类,这个类主要使用于映射的机制.
10.C#所定义的类结构,其中成员通常包含了方法,属性,字段与事件,Type类所提供的方法,用以取回这几种类型成员:
MethodInfo[] GetMethods() 取得指定类包含的方法成员列表.
PropertyInfo[] GetProperties() 取得指定类所包含的属性成员列表.
FieldInfo[] GetFields() 取得指定类包含的字段成员列表.
EventInfo[] GetEvents() 取得指定类型包含的事件成员列表.

Type类型针对构造函数提供其相对应的方法,形式如下:
ConstructorInfo[] GetConstructors()
最后一个提及的方法如下,返回一个包含所有成员的列表数组:
MemberInfo[] GetMembers()

以下是Type类提供的几个属性:
Assembly Assembly 取得指定类的组件
String FullName 取得指定类其完整的名称
String NameSpace 取得指定类所属的命名空间名称
以下几个bool值:
bool IsAbstract 是否为抽象类
bool IsArray 是否为数组
bool IsClass 是否一个指定的类的类
bool IsEnum 是否一个指定的类为一枚举类

typeof(objectType)


11.MemberInfo是Type的基类,本身是抽象类,提供的属性和两个方法成员,均能取得类内部成员信息以及元数据内容.
(1).   object[] GetCustomAttributes(bool inherit)
参数inherit意义,当搜索属性成员的时候,是否一并搜索其下继承结构里所有类成员的属性值.
(2).   object[] GetCustomAttributes(Type attType,bool inherit)
搜索指定类型对象的属性.如:typeof(CustomAttribute)


12.利用System.Reflection里的Assembly类,应用程序得以加载指定的组件,取出整个组件的内容结构,可以轻易的取出组件内部的所有信息,特

定类型内容,并且将其应用于映射的机制.
几个基本方法:
static Assembly Load(AssemblyName) 用以加载指定组件.

以下方法用以取得指定类型的Type类型对象,
1.Type GetType(string strName)//strName指定的类型
2.Type GetType(string strName,bool blnthrowOnError)//第二个参数是:当组件找不到时,是否抛出一个异常,true:抛出,false:不抛出.

13.动态调用方法Invoke是由类MethodBase所定义.
当我们取得一个MemberInfo对象实例之后,经过这个对象实例的Invoke方法,调用取得的方法.
Invoke方法用以进行方法的动态调用,一般形式如下:
Invoke(object obj,object[] parameters)
参数一:这个参数对象本身所参考的对象,为所要调用的方法其本身所属的来源对象.
参数二:调用指定方法所需要的参数集合,若调用的方法不需传入参数,则这个对象数组会参考一个null值.

public abstract ParameterInfo[] GetParameters();//这个方法由MethodBase所定义,MethodInfo继承.利用这个方法可以取得所有的参数信

息.

Invoke(object[] parameters)

14.应用程序定义域,System命名空间下
方法  public static AppDomain CreateDomain(string);//创建一个新的定义域
方法  public static void Unload(AppDomain domain);//用以卸载定义域
用途:1.不安全应用程序;2.runtime host 应用程序.

15.默认应用程序定义域
public static AppDomain CurrentDomain { get; }
AppDomain类提供方法GetAssemblies用以进行相关操作
public Assembly[] GetAssemblies();

16.加载应用程序定义域
由AppDomain对象实例调用该方法.
在定义域中加载指定的应用程序组件,必须借助方法CreateInstance,定义如下:
public ObjectHandle CreateInstance(string assemblyName,string typeName)
参数1:允许你指定所要加载的组件名称.
参数2:要求的类型完整名称,这个名称必须包含所属的命名空间,以"."运算符连接类型组成一完整字符串当作参数传入.
返回ObjectHandle对象实例,该类本身被使用于多个应用程序定义域之间传递对象,但是不需要加载所经过的各个定义域....(这个比较复

杂....)

17.序列化(Serialization)位于System.Runtime.Serialization.Formatter.Binary/Soap
二进制序列化:Binary Serialization ;  XML序列化:XML Serialization
支持序列化的两个类:
BinaryFormatter类  System.Runtime.Serialization.Formatter.Binary
XMLFormatter类  System.Runtime.Serialization.Formatter.Soap
(1)BinaryFormatter类
public void Serialize(Stream,object);
将object对象序列化后,传到stream流中.
public object Deserialize(Stream serializationStream);
参数:Stream是所要还原的数据流,重新组合还原被序列化分解的对象.
(2)SoapFormatter类
AS Above.
一个类要支持序列化分解,必须对它加属性[Serializable],[NonSerialized]标注为不可序列化.

18.自定义序列化对象的行为----继承ISerializable接口
实现该接口的方法: void GetObjectData(SerializationInfo SI,StreamingContext SC)
SI为一SerializationInfo类型的对象参数,是一种设计用以存储对象自定义序列化操作时所需的信息,而SC是一种StreamingContext结构类型参

数,用以表示序列化的来源数据源.

19.序列化属性的继承(不能被继承,子类重新标注该标记[Serializable])
对象的序列化属性默认是不被继承的,即被标注为[Serializable]不能被子类继承,解决方案在子类上继续标注为[Serializable],如果基类实现

了ISerializable接口,那么子类也要实现其中
GetObjectData(SerializationInfo ,StreamingContext)方法.

20.修正无法序列化的数据-----IDeserializationCallback接口
被标注为[DeSerialized],在序列化时无法被序列化,重组时得不到原先的变量值,可以在设计的时候,继承IDeserializationCallback接口,实现

方法OnDeserialization,还原正确的数据值.
 void OnDeserialization(object sender)//在还原时先调用该方法.

21.组件必须实现System.ComponentModel.IComponet接口,或继承实现这个接口的类.
组件本身包含一个以上的类,提供经过特别设计,能够被各种应用程序重复使用的程序代码;其被编译为组件,利用导入组件,你可以直接引用其中

的类以及类所提供的功能.
一般而言,比较简单的实现方式通常为直接继承类Component,这个类本身实现了IComponent接口.

制作组件的一些比较重要的概念:
(1.)复写Dispose方法IComponent接口定义了名称为Dispose的方法.
(2.)可视化接口与设计时期的支持.
(3.)组件容器(Container)与站点(Site) 一群组件可以被置放于容其中作适当的管理,而这些容器再进一步利用站点对其作管理.

22.Component类
IComponent接口位于System.ComponentModel下
Dispose方法有两个版本:
1.public void Dispose();用以清除组件掌握的所有相关资源.
2.protected virtual void Dispose(bool disposing);//bool值,为false则释放其中未受管理的资源.

22.线程的暂停于恢复
public void Suspend()    线程暂停  (一个线程启动后允许暂停)
public void Resume()     线程恢复(唤醒一个已经进入暂停状态的线程)***注意:如果该线程没有暂时停止执行,调用此方法会抛出

ThreadStateException的异常

由于特殊原因希望,希望线程暂停固定的时间间隔
public static void Sleep(int milliseconds)

public void Join() //封锁目前的线程,并且直到调用这个方法的线程执行完成后,再执行被封锁的线程.
public bool Join(int milliseconds)//这个参数让你指定在特定长度的时间过后,便启动暂停的线程,返回一个bool值

public bool IsAlive  { get; }  判断线程是否还在执行.ture:再执行
public ThreadState ThreadState { get; }

Monitor类允许一个特定的线程对资源作独占式的存取,于lock不同,Monitor类让你决定何时阻断或者继续特定线程的执行操作,这些方法让你更

为精确的控制资源的存取
public static bool Wait(object obj)//暂时停止线程,锁定目前的线程,并且将这个线程锁定的资源释放,obj为目前线程所要释放的对象参考
public static bool Wait(object obj,int milliseconds)//int这个参数指定对象其被释放的毫秒数
public static void Pulse(object obj)//恢复被Wait暂停的线程,无论Wait暂停多少个线程,Pulse总是恢复第一个被Wait暂停的线程

public void Interrupt()强制终止线程的执行

以下是线程迟ThreadPool类
public static bool QueueUserWorkItem(WaitCallback callback)//callback为调用的委派,封装所要执行的方法

23.<%@ Register TagPrefix="标记的前缀" TagName="标记的名称" Src="用户控件的路径" %>
   如果我们这么注册用户控件:<%@ Register TagPrefix="Ken" TagName="Hello" Src="../UserControls/my.ascx" %>  
在页面中,调用该用户控件<Ken:Hello id="自己定义" style="..." /> 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值