gpt4 book ai didi

c# - 在这种情况下我真的应该实现 IDisposable 吗?

转载 作者:行者123 更新时间:2023-11-30 21:58:00 25 4
gpt4 key购买 nike

我目前在开发 C# 应用程序时使用 NDepend。我违反了一条规则,指出“具有一次性实例字段的类型必须是一次性的”。

我知道当你做这样的事情时你应该这样做:

class SomeClass : IDisposable
{
private Control _someControl; // implements IDisposable

public SomeClass()
{
_someControl = new RandomControl();
}

// ...
}

但是,我在这样的处理程序类中遇到了违规行为:

public class SomeHandler
{
private Control _someControl; // implements IDisposable

public SomeHandler(Control control)
{
_someControl = control;
}

public void SomeMethod()
{
DoSomethingWith(_someControl);
}

// ...
}

处理程序对象应该与控件一样长。在这种情况下我真的应该实现 IDisposable 吗?在所有情况下,处理程序类不应该负责处理存储的控件(而是首先创建控件的类)。

最佳答案

如果您没有“对象”的所有权,则不得处置它。

有一些类(例如 StreamReader)有一个配置选项来告诉他们是否应该获得您传递给他们的 Stream 的所有权。显然 StreamReader 必须是 IDisposable 并做一些逻辑检查

例如:https://msdn.microsoft.com/library/gg712952.aspx

public StreamReader(
Stream stream,
Encoding encoding,
bool detectEncodingFromByteOrderMarks,
int bufferSize,
bool leaveOpen
)

更相似的东西:PictureBox类不拥有传递的 Image 的所有权。 Image 必须由控件的创建者/所有者处理和/或如果您将 Image 替换为另一个 Image,(设置属性Image) 由执行操作的人执行。

请注意,在 C# 中,无法知道控件是否应该取得/拥有某物的所有权。你只能写在文档中。

关于c# - 在这种情况下我真的应该实现 IDisposable 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30346063/

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