以下是一个典型的处置模式示例:publicboolIsDisposed{get;privateset;}#regionIDisposableMemberspublicvoidDispose(){Dispose(true);GC.SuppressFinalize(this);}protectedvirtualvoidDispose(booldisposing){if(!IsDisposed){if(disposing){//performcleanuphere}IsDisposed=true;}}~MyObject(){Dispose(false);}我明白dispose的作用,但我不明
以下是一个典型的处置模式示例:publicboolIsDisposed{get;privateset;}#regionIDisposableMemberspublicvoidDispose(){Dispose(true);GC.SuppressFinalize(this);}protectedvirtualvoidDispose(booldisposing){if(!IsDisposed){if(disposing){//performcleanuphere}IsDisposed=true;}}~MyObject(){Dispose(false);}我明白dispose的作用,但我不明
最近在和同事讨论Dispose的值(value)和实现IDisposable的类型.我认为实现IDisposable是有值(value)的对于应该尽快清理的类型,即使没有要清理的非托管资源.我的同事有不同的想法;实现IDisposable如果您没有任何非托管资源,则不需要,因为您的类型最终将被垃圾收集。我的论点是,如果您想尽快关闭ADO.NET连接,那么实现IDisposable和usingnewMyThingWithAConnection()会有意义。我的同事回答说,在幕后,ADO.NET连接是非托管资源.我对他的回复是一切最终都是非托管资源.我知道recommendeddispos
最近在和同事讨论Dispose的值(value)和实现IDisposable的类型.我认为实现IDisposable是有值(value)的对于应该尽快清理的类型,即使没有要清理的非托管资源.我的同事有不同的想法;实现IDisposable如果您没有任何非托管资源,则不需要,因为您的类型最终将被垃圾收集。我的论点是,如果您想尽快关闭ADO.NET连接,那么实现IDisposable和usingnewMyThingWithAConnection()会有意义。我的同事回答说,在幕后,ADO.NET连接是非托管资源.我对他的回复是一切最终都是非托管资源.我知道recommendeddispos
这是我遇到的一个电话面试问题:是否有时不会在范围由usingblock声明的对象上调用Dispose?我的回答是否定的-即使在usingblock期间发生异常,Dispose仍将被调用。面试官不同意,说如果using被包裹在try-catchblock中,那么在你进入的时候Dispose不会被调用捕获block。这与我对结构的理解背道而驰,而且我一直没能找到任何可以支持面试官观点的东西。他是对的还是我误解了这个问题? 最佳答案 导致在usingblock中不调用Dispose的四种情况:在usingblock内时机器出现电源故障。您
这是我遇到的一个电话面试问题:是否有时不会在范围由usingblock声明的对象上调用Dispose?我的回答是否定的-即使在usingblock期间发生异常,Dispose仍将被调用。面试官不同意,说如果using被包裹在try-catchblock中,那么在你进入的时候Dispose不会被调用捕获block。这与我对结构的理解背道而驰,而且我一直没能找到任何可以支持面试官观点的东西。他是对的还是我误解了这个问题? 最佳答案 导致在usingblock中不调用Dispose的四种情况:在usingblock内时机器出现电源故障。您
我对CLR和GC的工作方式很着迷(我正在通过C#、JonSkeet的书籍/帖子等阅读CLR来扩展我的知识)。无论如何,这句话有什么区别:MyClassmyclass=newMyClass();myclass=null;或者,通过让MyClass实现IDisposable和析构函数并调用Dispose()?另外,如果我有一个带有using语句的代码块(例如下面),如果我单步执行代码并退出using块,那么对象是在那时还是在发生垃圾收集时被处理?如果我在using块中调用Dispose()会发生什么?using(MyDisposableObjmydispobj=newMyDisposabl
我对CLR和GC的工作方式很着迷(我正在通过C#、JonSkeet的书籍/帖子等阅读CLR来扩展我的知识)。无论如何,这句话有什么区别:MyClassmyclass=newMyClass();myclass=null;或者,通过让MyClass实现IDisposable和析构函数并调用Dispose()?另外,如果我有一个带有using语句的代码块(例如下面),如果我单步执行代码并退出using块,那么对象是在那时还是在发生垃圾收集时被处理?如果我在using块中调用Dispose()会发生什么?using(MyDisposableObjmydispobj=newMyDisposabl
我正在尝试使用EntityFrameworkm填充GridView,但每次我都会收到以下错误:"Propertyaccessor'LoanProduct'onobject'COSIS_DAL.MemberLoan'threwthefollowingexception:TheObjectContextinstancehasbeendisposedandcannolongerbeusedforoperationsthatrequireaconnection."我的代码是:publicListGetAllMembersForLoan(stringkeyword){using(CosisEnt
我正在尝试使用EntityFrameworkm填充GridView,但每次我都会收到以下错误:"Propertyaccessor'LoanProduct'onobject'COSIS_DAL.MemberLoan'threwthefollowingexception:TheObjectContextinstancehasbeendisposedandcannolongerbeusedforoperationsthatrequireaconnection."我的代码是:publicListGetAllMembersForLoan(stringkeyword){using(CosisEnt