net程序员应该掌握的常用类库 (二)
2010-09-14 16:29
260 查看
GC类
它可以通过编程使用一个静态的成员集合与垃圾回收器进行交互。一般只有使用那托管代码是才需要用到System.GC类
垃圾回收由以下步骤组成:
1.垃圾回收器搜索托管代码中引用的托管对象。
2.垃圾回收器尝试完成没有被引用的对象。
3.垃圾回收器释放没有被引用的对象并回收它们的内存。
Guid类
表示全局唯一标识符(GUID)。这个类园子里讨论比较火热。
大家可以看看以下面几篇文章
使用Guid做主键和int做主键性能比较
ICloneable接口
支持克隆,即用与现有实例相同的值创建类的新实例。
viewsource
print?
调用接口
viewsource
print?
Idisposable接口
定义一种释放分配的资源的方法。
1、Finalize只释放非托管资源;
2、Dispose释放托管和非托管资源;
3、重复调用Finalize和Dispose是没有问题的;
4、GC.Collect();强制对所有代进行即时垃圾回收。
5、Finalize和Dispose共享相同的资源释放策略,因此他们之间也是没有冲突的。
MSDN中关于这个接口的说明:
[/code]
它可以通过编程使用一个静态的成员集合与垃圾回收器进行交互。一般只有使用那托管代码是才需要用到System.GC类
垃圾回收由以下步骤组成:
1.垃圾回收器搜索托管代码中引用的托管对象。
2.垃圾回收器尝试完成没有被引用的对象。
3.垃圾回收器释放没有被引用的对象并回收它们的内存。
Guid类
表示全局唯一标识符(GUID)。这个类园子里讨论比较火热。
大家可以看看以下面几篇文章
关于GUID
ICloneable接口
支持克隆,即用与现有实例相同的值创建类的新实例。
柚子实现接口:
public class userinfo:System.ICloneable |
{ |
public userinfo( string userName, string password) |
{ |
this .UserName=userName; |
this .Password=password; |
} |
public string UserName{ get ; set ;} |
public string Password{ get ; set ;} |
public override string ToString() |
{ |
return string .Format( "姓名:{0}密码:{1}" , this .UserName, this .Password); |
} |
public object Clone() |
{ |
userinfouserinfo= new userinfo( this .UserName, this .Password); |
return userinfo; |
} |
01 | class Program |
02 | { |
03 | static void Main( string []args) |
04 | { |
05 | userinfous1= new userinfo( "小武" , "123456789" ); |
06 | userinfous2=us1; |
07 | userinfous3=us1.Clone() as userinfo; |
08 |
09 | us2.UserName= "小武的相等" ; |
10 | us3.UserName= "小武的克隆" ; |
11 |
12 | Console.WriteLine(us1.ToString()); |
13 | Console.WriteLine(us2.ToString()); |
14 | Console.WriteLine(us3.ToString()); |
15 |
16 | Console.Read(); |
17 |
18 | } |
19 | } |
定义一种释放分配的资源的方法。
1、Finalize只释放非托管资源;
2、Dispose释放托管和非托管资源;
3、重复调用Finalize和Dispose是没有问题的;
4、GC.Collect();强制对所有代进行即时垃圾回收。
5、Finalize和Dispose共享相同的资源释放策略,因此他们之间也是没有冲突的。
MSDN中关于这个接口的说明:
[ComVisible(true)]
publicinterfaceIDisposable{
//MethodsvoidDispose();
}
1.[ComVisible(true)]:指示该托管类型对COM是可见的.
代码[code]//1.下面代码对Dispose方法做了封装,说明如何在使用托管和本机资源的类中实现Dispose(bool)的常规示例:
publicclassBaseResource:IDisposable
{
//非托管资源
privateIntPtrhandle;
//托管资源
privateComponentComponents;
//Dispose是否被调用
privatebooldisposed=false;
publicBaseResource()
{
}
publicvoidDispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protectedvirtualvoidDispose(booldisposing)
{
if(!this.disposed)
{
if(disposing)
{
//释放托管资源
Components.Dispose();
}
//释放非托管资源,如果disposing为false,
//只有托管资源被释放
CloseHandle(handle);
handle=IntPtr.Zero;
//注意这里不是线程安全的
}
disposed=true;
}
//析构函数只会在我们没有直接调用Dispose方法的时候调用
//派生类中不用在次提供析构函数
~BaseResource()
{
Dispose(false);
}
//如果你已经调用了Dispose方法后在调用其他方法会抛出ObjectDisposedException
publicvoidDoSomething()
{
if(this.disposed)
{
thrownewObjectDisposedException();
}
}
}
publicclassMyResourceWrapper:BaseResource
{
//托管资源
privateManagedResourceaddedManaged;
//非托管资源
privateNativeResourceaddedNative;
privatebooldisposed=false;
publicMyResourceWrapper()
{
}
protectedoverridevoidDispose(booldisposing)
{
if(!this.disposed)
{
try
{
if(disposing)
{
addedManaged.Dispose();
}
CloseHandle(addedNative);
this<;/span>.disposed=true;
}
finally
{
base.Dispose(disposing);
}
}
}
}
[/code]
相关文章推荐
- [转载]net程序员应该掌握的常用类库
- net程序员应该掌握的常用类库
- net程序员应该掌握的常用类库
- [转]net程序员应该掌握的常用类库
- net程序员应该掌握的常用类库 (一)
- net程序员应该掌握的常用类库
- [转].net程序员应该掌握的常用类库
- .net程序员应该掌握的常用类库
- .net程序员应该掌握的常用类库
- .net程序员应该掌握的常用类库
- .net程序员应该掌握的常用类库
- .net程序员应该掌握的常用类库 (三)
- .net程序员应该掌握的常用类库(转发)
- .net程序员应该掌握的常用类库
- j2ee程序员应该掌握的linux知识(转贴来自http://blog.csdn.net/yzhz)
- .net程序员应该掌握的常用类库 (一)
- .net程序员应该掌握的常用类库
- .net程序员应该掌握的常用类库
- .net程序员应该掌握的常用类库 (三)
- .net程序员应该掌握的常用类库 (二)