Ana*_*bhi 0 .net c# oop constructor object
假设我有一个名为"ABC"的类
Class ABC:IDisposable
{
public string name {get;set;}
public string Method1()
{
// Implements
}
//end of class
}
Run Code Online (Sandbox Code Playgroud)
我从其他人那里听说你应该使用always inherit IDisposable来释放内存创建上面类的对象,如下所示:
using(ABC objABC = new ABC())
{
objABC.Method1();
}
Run Code Online (Sandbox Code Playgroud)
但是还有其他方法可以调用和使用Eg的上面的类和方法
private string testmethods()
{
ABC objABC = new ABC();
string test = objABC.Method1();
// I want to know this above `objABC` 's memory is free after finish `testmethods()`?
// we can also call using this like below
string test2 = new ABC().Method1();
}
Run Code Online (Sandbox Code Playgroud)
我想知道哪种方法最好?
我也想知道的是,对象内存是在testmethods()通话结束后自动清除的吗?
假设ABC不保留任何非托管资源,则不需要实现IDisposable.只要没有对它们的实时引用,C#中的对象就有资格进行垃圾收集,当垃圾收集器运行时,它们使用的内存将自动释放.
只有IDisposable拥有需要释放的非托管资源或拥有其他实现的托管对象时,才需要实现类IDisposable.如果您的类拥有非托管资源,那么如果在收集之前未调用它们,它们还应实现终结器以释放它们Dispose.
因此,第二种方法是首选方法,并且objABC在objABC.Method1返回后有资格进行收集(实际上可以尽快收集,尽管这是一种内部GC机制).请注意,它不会在该点自动释放,但仅在GC下次运行时才会释放,假设没有更多的引用.