首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

【附详细示例代码】关于对象实现IDisposable接口,使用Dispose()方法释放资源的疑问,该怎么处理

2012-02-10 
【附详细示例代码】关于对象实现IDisposable接口,使用Dispose()方法释放资源的疑问我很希望自己的程序实现ID

【附详细示例代码】关于对象实现IDisposable接口,使用Dispose()方法释放资源的疑问
我很希望自己的程序实现IDisposable,这样可以使用using语句简化代码、优化程序,但是网上关于IDisposable接口实现的说明很杂,我只糊里糊涂的学来了一点,照猫画虎做出了这个示例代码,想在此请教各位,下面的代码中,释放资源的部分代码写的是否正确?我是否需要在Dispose()方法中自己手动逐个清理每个字段的值?还是说C#会自己完成这些工作?


namespace   学校
{

public   class   学生   :   IDisposable
{

#region   基础代码

///   <summary>
        ///   构造函数
        ///   </summary>
        public   学生()
        {

        }

///   <summary>
        ///   对象唯一索引编号
///   对应属性:编号
        ///   </summary>
int   ID;

        ///   <summary>
        ///   [只读]
///   对象唯一索引编号
///   对应字段:ID
        ///   </summary>
public   int   编号
{

get
        {
                return   ID;
        }

}

///   <summary>
        ///   对应属性:姓名
        ///   </summary>
string   Name;

        ///   <summary>
        ///   对应字段:Name
        ///   </summary>
public   string   姓名
{

get
        {
                return   Name;
        }

set
        {
                Name=value;
        }

}

                ///   <summary>
                ///   重写ToString方法
                ///   </summary>        
                public   override   string   ToString()
                {
                        StringBuilder   S   =   new   StringBuilder();
S.AppendLine( "[学生]对象 ");
S.AppendLine( "编号(ID:int):   "   +   编号);
S.AppendLine( "姓名(Name:string):   "   +   姓名);
return   S.ToString();

                }

#endregion

#region   扩展功能代码

#region   IDisposable   成员

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

        protected   virtual   void   Dispose(bool   disposing)
        {
                if   (!hasDispose)
                {


                        if   (disposing)
                        {
                               
                        }
                        hasDispose   =   true;
                }
        }

        ~学生()
        {
                Dispose(false);
        }

        private   bool   hasDispose;  

        #endregion

#endregion

}

///   <summary>
        ///   对应数据表:[Teacher]
        ///   </summary>
public   class   教师   :   IDisposable
{

#region   基础代码

///   <summary>
        ///   构造函数
        ///   </summary>
        public   教师()
        {

        }

///   <summary>
        ///   对象唯一索引编号
///   对应属性:编号
        ///   </summary>
int   ID;

        ///   <summary>
        ///   [只读]
///   对象唯一索引编号
///   对应字段:ID
        ///   </summary>
public   int   编号
{

get
        {
                return   ID;
        }

}

///   <summary>
        ///   对应属性:名称
        ///   </summary>
string   Name;

        ///   <summary>
        ///   对应字段:Name
        ///   </summary>
public   string   名称
{

get
        {
                return   Name;
        }

set
        {
                Name=value;
        }

}

                ///   <summary>
                ///   重写ToString方法
                ///   </summary>        
                public   override   string   ToString()
                {
                        StringBuilder   S   =   new   StringBuilder();
S.AppendLine( "[教师]对象 ");
S.AppendLine( "编号(ID:int):   "   +   编号);


S.AppendLine( "名称(Name:string):   "   +   名称);
return   S.ToString();

                }

#endregion

#region   扩展功能代码

#region   IDisposable   成员

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

        protected   virtual   void   Dispose(bool   disposing)
        {
                if   (!hasDispose)
                {
                        if   (disposing)
                        {
                               
                        }
                        hasDispose   =   true;
                }
        }

        ~教师()
        {
                Dispose(false);
        }

        private   bool   hasDispose;  

        #endregion

#endregion

}

public   class   班级   :   IDisposable
{

#region   基础代码

///   <summary>
        ///   构造函数
        ///   </summary>
        public   班级()
        {

        }

///   <summary>
        ///   对象唯一索引编号
///   对应属性:编号
        ///   </summary>
int   ID;

        ///   <summary>
        ///   [只读]
///   对象唯一索引编号
///   对应字段:ID
        ///   </summary>
public   int   编号
{

get
        {
                return   ID;
        }

}

///   <summary>
        ///   对应属性:班主任
        ///   </summary>
教师   Master;

        ///   <summary>
        ///   对应字段:Master
        ///   </summary>
public   教师   班主任
{

get
        {
                return   Master;
        }

set
        {
                Master=value;
        }



}

///   <summary>
        ///   对应属性:学生
        ///   </summary>
List <学生>   Students;

        ///   <summary>
        ///   对应字段:Students
        ///   </summary>
public   List <学生>   学生
{

get
        {
                return   Students;
        }

set
        {
                Students=value;
        }

}

                ///   <summary>
                ///   重写ToString方法
                ///   </summary>        
                public   override   string   ToString()
                {
                        StringBuilder   S   =   new   StringBuilder();
S.AppendLine( "[班级]对象 ");
S.AppendLine( "编号(ID:int):   "   +   编号);
S.AppendLine( "班主任(Master:教师):   "   +   班主任);
S.AppendLine( "学生(Students:List <学生> ):   "   +   学生);
return   S.ToString();

                }

#endregion

#region   扩展功能代码

#region   IDisposable   成员

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

        protected   virtual   void   Dispose(bool   disposing)
        {
                if   (!hasDispose)
                {
                        if   (disposing)
                        {
                               
                        }
                        hasDispose   =   true;
                }
        }

        ~班级()
        {
                Dispose(false);
        }

        private   bool   hasDispose;  

        #endregion

#endregion

}

}

[解决办法]
不用的,不是所有基类都要写释放的方法,系统有自动释放的功能

热点排行