代码之家  ›  专栏  ›  技术社区  ›  zsharp

如何处理属于另一个类的属性的类?

c#
  •  0
  • zsharp  · 技术社区  · 15 年前

    在dc是服务类属性的情况下,如何处理dc?

     class Service()
    
      {
    
         public DataContext DC= new DataContext();
    
         public void SomeMethod()
           {   
              DC is used here.
    
           }
    
         public void SomeOtherMethod()
           {
              DC is also used here.
           }
    
      }
    
    5 回复  |  直到 15 年前
        1
  •  5
  •   Ed Swangren    15 年前

    如果“service”类维护对非托管资源的引用,则它应实现IDisposable。这告诉类的客户机,他们需要对“service”的实例调用Dispose()。您可以在类的'dispose()方法中对“dc”调用dispose()。

    class Service : IDisposable
    {
        public DataContext DC= new DataContext();
    
        public void Dispose( )
        {
            DC.Dispose( );
        }
    }
    

    顺便提一句,我将避免在C中创建公共字段,其中属性是常见的习惯用法。

        2
  •  1
  •   Yuriy Faktorovich    15 年前

    使服务IDisposable并在Dispose方法中释放DataContext。这是一种常见的模式。

        3
  •  1
  •   andyp    15 年前

    你可以实现 IDisposable 并在Dispose()方法中释放托管的DC。然后使用托管类使用“using”…

    using(Service service = new Service())
    {
        // do something with "service" here
    }
    
        4
  •  1
  •   Mike Atlas    15 年前

    您的服务类应该负责处理DataContext。

    使用标准 Dispose pattern .

        5
  •  1
  •   Philip Wallace    15 年前

    实现IDisposable: MSDN: Implementing a Dispose Method

    public void Dispose() 
    {
        Dispose(true);
    
        // Use SupressFinalize in case a subclass
        // of this type implements a finalizer.
        GC.SuppressFinalize(this);      
    }
    
    protected virtual void Dispose(bool disposing)
    {
        // If you need thread safety, use a lock around these 
        // operations, as well as in your methods that use the resource.
        if (!_disposed)
        {
            if (disposing) {
                if (DC != null)
                    DC.Dispose();
            }
    
            // Indicate that the instance has been disposed.
            DC = null;
            _disposed = true;   
        }
    }