Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果是扩展类,如何处理未管理的资源?_C#_.net - Fatal编程技术网

C# 如果是扩展类,如何处理未管理的资源?

C# 如果是扩展类,如何处理未管理的资源?,c#,.net,C#,.net,有两个类别A和B。ClassB扩展了ClassA。类A和类B中都有非托管资源。 所以问题是:应该为这两个类提供Dispose()方法还是为ClassA提供Dispose()方法就足够了 编辑1: 到目前为止,我得到的答复是,我认为我的陈述被误解为ClassB继承自ClassA。我的意思可以通过访问以下链接来理解: 页面 页面 您必须从子进程调用基进程Dispose。在类B中实现Dispose,将覆盖继承的方法。这是因为方法在C#中默认是虚拟的(如果在子类中重新实现,将调用重新实现) 这取决于C

有两个类别A和B。ClassB扩展了ClassA。类A和类B中都有非托管资源。 所以问题是:应该为这两个类提供Dispose()方法还是为ClassA提供Dispose()方法就足够了

编辑1:
到目前为止,我得到的答复是,我认为我的陈述被误解为ClassB继承自ClassA。我的意思可以通过访问以下链接来理解:

  • 页面
  • 页面

    • 您必须从子进程调用基进程
      Dispose
      。在类B中实现
      Dispose
      ,将覆盖继承的方法。这是因为方法在C#中默认是虚拟的(如果在子类中重新实现,将调用重新实现)


      这取决于
      ClassB
      是否引入了新的可支配资源。如果这样做,
      ClassA
      Dispose
      方法将无法处理
      ClassB
      的新资源。在
      ClassA中使用此模式

      // In ClassA
      
      public void Dispose()
      {
          Dispose(true);
      
          // Only if you are using a finalizer
          GC.SuppressFinalize(this);
      }
      
      protected virtual void Dispose(bool disposing)
      {
          if (disposing)
          {
              // get rid of managed resources
          }   
          // get rid of unmanaged resources
      }
      
      ClassB
      中,您可以覆盖虚拟
      Dispose(bool disposing)
      方法,而不必重新实现
      IDisposable
      接口

      // In ClassB
      
      protected override void Dispose(bool disposing)
      {
          base.Dispose(disposing);
          if (disposing)
          {
              // get rid of managed resources declared in ClassB
          }   
          // get rid of unmanaged resources declared in ClassB
      }
      

      终结器将调用
      Dispose(false)

      根据我目前得到的答复,我认为我的陈述被误解为ClassB继承自ClassA。我的意思可以通过访问以下链接来理解:你能扩展你的问题并强调你需要什么吗?这些文章完全是关于其他东西的(扩展方法)
      // In ClassB
      
      protected override void Dispose(bool disposing)
      {
          base.Dispose(disposing);
          if (disposing)
          {
              // get rid of managed resources declared in ClassB
          }   
          // get rid of unmanaged resources declared in ClassB
      }