ron*_*ana 6 c# delphi interface
我是Delphi程序员,并试图在这里完成一些C#.C#中的接口是否与Delphi中的接口相同 - 您不必担心释放它,因为当它超出范围时它被释放.
Delphi和.NET在这个领域的关键区别,特别是与接口有关,是清理的非确定性.
在Delphi中,所有接口使用都遵循COM模型.也就是说,它是参考计数.如果类实现了引用计数生命周期管理模型,那么当引用计数降至零时,对象实例将在该点被销毁.
注意:生命周期管理是类实现的一个功能.看到这最清楚,一看执行IUnknown.Release在TInterfacedObject:
function TInterfacedObject._Release: Integer;
begin
  Result := InterlockedDecrement(FRefCount);
  if Result = 0 then
    Destroy;
end;
Run Code Online (Sandbox Code Playgroud)
如果Release的实现没有调用Destroy,那么当引用计数降为零时,该对象不会被销毁,并且仍然必须通过对该对象的一些对象引用显式地Free.这可以在Delphi中用于创建实现接口但不受自动,引用计数生命周期管理的对象(尽管您无法避免编译器注入的引用计数代码,即调用AddRef和Release).
在.NET中,首先没有引用计数本身.垃圾收集器以更复杂的方式工作,其细节与此讨论没有直接关系.
关键的区别在于,当一个对象不再被使用时(但是确定超出简单的引用计数),这不是在.NET中销毁它的点.
实际上,从理论上讲,未使用的对象可能会累积在您的应用程序中,直到您的进程生命周期中的很多很晚的时间点 - 特别是在具有很少空闲周期的计算密集型应用程序中.在.NET中你根本不能确定准确的时候那些不再使用的对象,最终将free'd.
有些人认为这是一件好事,虽然它混淆了当这些对象被销毁时清理被对象锁定或拥有的资源的通常做法,因为你通常需要释放那些被锁定/拥有的资源比由等待垃圾收集器.这就是IDisposable在.NET中的用武之地,其细节再次没有直接相关性,可以在闲暇时进一步研究.
是的,对于程序员来说,他们看起来是一样的.使用和忘记.
在内部,它们的工作方式不同,在.NET中,接口是(只是另一个)垃圾收集器提取的引用.
在Delphi中,接口是一种特殊的引用计数(不同的Meory管理技术).
.NET/Delphi的主要区别在于.NET中的所有引用(接口,对象和数组)都是垃圾收集的.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           367 次  |  
        
|   最近记录:  |