您的位置:首页 > 职场人生

net程序员应该掌握的常用类库 (二)

2010-09-14 16:29 260 查看
GC类

它可以通过编程使用一个静态的成员集合与垃圾回收器进行交互。一般只有使用那托管代码是才需要用到System.GC类

垃圾回收由以下步骤组成:

1.垃圾回收器搜索托管代码中引用的托管对象。

2.垃圾回收器尝试完成没有被引用的对象。

3.垃圾回收器释放没有被引用的对象并回收它们的内存。

Guid类

表示全局唯一标识符(GUID)。这个类园子里讨论比较火热。

大家可以看看以下面几篇文章

关于GUID

使用Guid做主键和int做主键性能比较

ICloneable接口

支持克隆,即用与现有实例相同的值创建类的新实例。

柚子实现接口:

viewsource

print?

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;
}
调用接口

viewsource

print?

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
}
Idisposable接口

定义一种释放分配的资源的方法。

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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: