gpt4 book ai didi

c# - 为什么可以在类中编写 dispose() 方法时使用 IDisposable

转载 作者:行者123 更新时间:2023-11-30 13:19:42 25 4
gpt4 key购买 nike

标题很清楚地解释了问题。我想知道为什么我要实现 IDisposable 接口(interface),它在一个类中只提供一个方法定义,而在另一个类中,我可以显式定义一个 dispose() 方法并释放所有非托管资源。

假设我有这两个类

class MyClass : IDisposable
{
public void Dispose() { }
}

class MyClass2
{
public void Dispose() { }
}

MyClass 和 MyClass2 到底有什么区别??

最佳答案

此示例中的一个非常具体的结果(特定于 IDisposable)是第一个类可以在 using() {} 语句中使用,而第二个不能:

using (var c1 = new MyClass())  { ... }  // Ok
using (var c2 = new MyClass2()) { ... } // Error

更一般的答案是接口(interface)提供了一个允许替换的契约。搜索“接口(interface)的好处”或类似内容以获取更多信息。例如this SO answer有一个列表。

替换示例:

public interface IRepository { ... }

public class RealRepository : IRepository { ... }
public class MockRepository : IRepository { ... }

class MyController { public IRepository { get; set; }

这个(粗略的)片段显示了一个 Controller ,它可以与真实的 (Db) 存储库一起使用并使用模拟存储库进行测试。

关于c# - 为什么可以在类中编写 dispose() 方法时使用 IDisposable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17086108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com