程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> .net程序員應該掌握的常用類庫(二)

.net程序員應該掌握的常用類庫(二)

編輯:關於.NET

GC類

它可以通過編程使用一個靜態的成員集合與垃圾回收器進行交互。 一般只有使用那托管代碼是才需要用到System.GC類

垃圾回收由以下步驟組成:

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

2. 垃圾回收器嘗試完成沒有被引用的對象。

3. 垃圾回收器釋放沒有被引用的對象並回收它們的內存。

Guid類

表示全局唯一標識符 (GUID)。 這個類園子裡討論比較火熱。

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

關於GUID

使用Guid做主鍵和int做主鍵性能比較

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()
        {
            userinfo userinfo = new userinfo(this.UserName, this.Password);
            return userinfo;
        }

調用接口

01 class Program
02    {
03        static void Main(string[] args)
04        {
05            userinfo us1 = new userinfo("小武", "123456789");
06            userinfo us2 = us1;
07            userinfo us3 = 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)]
public interface IDisposable{
    // Methods
    void Dispose();
}

1.[ComVisible(true)]:指示該托管類型對 COM 是可見的.

//1.下面代碼對Dispose方法做了封裝,說明如何在使用托管和本機資源的類中實現 Dispose(bool) 的常規示例:
public class BaseResource : IDisposable
{
// 非托管資源
private IntPtr handle;
//托管資源
private Component Components;
// Dispose是否被調用
private bool disposed = false;

public BaseResource()
{
}

public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{

if (!this.disposed)
{
if (disposing)
{
// 釋放托管資源
Components.Dispose();
}
// 釋放非托管資源,如果disposing為false,
// 只有托管資源被釋放
CloseHandle(handle);
handle = IntPtr.Zero;
// 注意這裡不是線程安全的
}
disposed = true;
}

// 析構函數只會在我們沒有直接調用Dispose方法的時候調用
// 派生類中不用在次提供析構函數
~BaseResource()
{
Dispose(false);
}

// 如果你已經調用了Dispose方法後在調用其他方法會拋出ObjectDisposedException
public void DoSomething()
{
if (this.disposed)
{
throw new ObjectDisposedException();
}
}
}


public class MyResourceWrapper : BaseResource
{
// 托管資源
private ManagedResource addedManaged;
// 非托管資源
private NativeResource addedNative;
private bool disposed = false;

public MyResourceWrapper()
{
}

protected override void Dispose(bool disposing)
{
if (!this.disposed)
{
try
{
if (disposing)
{
addedManaged.Dispose();
}

CloseHandle(addedNative);
this<;/span>.disposed = true;
}
finally
{
base.Dispose(disposing);
}
}
}
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved