【问题标题】:ASP.NET: Implementing Init and Dispose methodsASP.NET:实现 Init 和 Dispose 方法
【发布时间】:2011-04-12 08:59:39
【问题描述】:

一个 ASP.NET Web 应用程序是否可以只有一个 Init 和一个 Dispose 方法,或者我可以为我想关联这些方法的每个类实现这些?

更具体地说,我有 Customer 组件和 CustomerRecord 类,并希望在这两个类中实现 InitDispose 方法。

这样做的正确方法是什么?

要求:

我希望为上述每个类提供独立的 InitDispose 方法。

【问题讨论】:

    标签: asp.net web-applications methods dispose init


    【解决方案1】:

    对于应该是一次性的类,通过公开一个公共的Dispose 方法,必须实现IDispsable 接口,以使“可处置性”在显式用户处置范围之外有效。这在很多地方都被多次覆盖,including here,例如:

    public class Customer : IDisposable
    {
        public void Dispose()
        {
            Dispose(true);
            GC.SupressFinalize(this);
        }
    
        protected virtual void Dispose(bool disposing)
        {
            if (disposing)
            {
                //dispose of managed resources
            }
            //dispose of unmanaged resources
        }
    
        ~Customer()
        {
            Dispose(false);
        }
    }
    

    请注意,析构函数(以波浪号 ~ 开头的方法)可能不是必需的,但请阅读我上面链接的答案中的详细信息,以了解 what 的情况>为什么 - 这只是直接回答你的问题。

    至于Init方法,你指的是constructor吗?

    如果是,那么看看上面例子中的析构函数;构造函数(或初始化程序)可以用相同的方式定义,减去波浪号,通常加上显式访问修饰符(publicprivate 等),例如:

    public class Customer
    {
        public Customer()
        {
    
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以根据需要使用 Init 和 Dispose 方法创建一个基类,然后让其他类继承它。例如:

      public class BaseClass
      {
          public void Init()
          {
              //Some code
          }
      
          public void Dispose()
          {
              //Some code
          }
      }
      
      public class Customer : BaseClass
      {
          //Some code
      }
      

      这可能对你有帮助。

      【讨论】:

      • 我想为问题中提到的每个类拥有独立的 init 和 dispose 方法
      • 你的一次性类必须实现IDisposable。此外,应使用 virtual 修饰符适当地标记旨在被覆盖或扩展的方法。
      猜你喜欢
      • 2011-05-25
      • 2016-06-25
      • 2011-11-05
      • 2014-10-12
      • 2013-11-22
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多