使用非托管资源时,将它们传递给其他对象的最佳做法是什么?我理解应该是创建非托管资源来处理它的类的责任,但是如果我将它传递给构造函数,资源会持久存在,然后构造函数将它放在私有字段中以供整个对象使用。寿命。
例如,请考虑以下情形:
public class Source
{
public static void Main(string[] args)
{
using (MyUnmanagedResource r = new MyUnmanagedResource())
{
Helper helper = new Helper(r);
helper.M1();
Helper helper2 = new Helper();
helper2.M2(r);
}
}
}
public class Helper
{
private MyUnmanagedResource resource;
public Helper(){}
public Helper(MyUnmanagedResource r)
{
resource = r;
}
public void M1()
{
Changer c = new Changer(resource);
c.M1();
}
public void M2(MyUnmanagedResource re)
{
Changer c = new Changer();
c.M2(re);
}
}
public class Changer
{
private MyUnmanagedResource resource;
public Changer(){}
public Changer(MyUnmanagedResource r)
{
resource = r;
}
public void M1()
{
resource.DoThing();
}
public void M2(MyUnmanagedResource re)
{
re.DoThing2();
}
}
在这种情况下,这是最佳做法?将它传递给私有变量以供以后使用肯定更容易编写,但这是否会导致处理资源的问题?在这个例子中只有一个方法,后者似乎更好,但是当你有10-15个方法使用资源,而其他类也被调用需要资源时,它会变得非常混乱。
我过去曾遇到内存泄漏问题,而且我不确定它是否处理非托管资源的方式。我将非托管资源更改为通过参数传递,但它导致它成为大约50个方法中的参数,这看起来很痛苦。