zoukankan      html  css  js  c++  java
  • .net程序员应该掌握的常用类库 (二)

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

    转贴请注明:博客园http://www.cnblogs.com/and/archive/2010/03/25/1694692.html 

      GC类

            它可以通过编程使用一个静态的成员集合与垃圾回收器进行交互。 一般只有使用那托管代码是才需要用到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()
            {
                userinfo userinfo = new userinfo(this.UserName, this.Password);
                return userinfo;
            }
    
    调用接口
     class Program
        {
            static void Main(string[] args)
            {
                userinfo us1 = new userinfo("小武", "123456789");
                userinfo us2 = us1;
                userinfo us3 = us1.Clone() as userinfo;
    
                us2.UserName = "小武的相等";
                us3.UserName = "小武的克隆";
    
                Console.WriteLine(us1.ToString());
                Console.WriteLine(us2.ToString());
                Console.WriteLine(us3.ToString());
    
                Console.Read();
            
            }
        }
    

    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);
    }
    }
    }
    }
    
    
    
  • 相关阅读:
    Eclipse 的单步调试
    CALayer快速入门
    UITableView快速入门
    iOS程序启动原理
    iOS触摸事件
    UITableViewCell重用和性能优化
    Autolayout
    iOS适配
    NSTimer
    UIScrollView
  • 原文地址:https://www.cnblogs.com/and/p/1694692.html
Copyright © 2011-2022 走看看