gpt4 book ai didi

c# - 为什么 WinForms 设计器会在其 dispose 方法中生成类似 'inconvenient' 的代码?

转载 作者:太空狗 更新时间:2023-10-29 22:33:47 24 4
gpt4 key购买 nike

当您创建表单或用户控件时,WinForms 设计器会生成如下所示的处置方法:

    protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

此代码的问题在于,如果对其进行编辑以处理其他对象,它可能会导致不正确的行为。我见过 .designer.cs 文件的处理方法如下所示:

    protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
if (_myDisposable != null)
_myDisposable.Dispose();
if (_myOtherDisposable != null)
_myOtherDisposable.Dispose();
}
base.Dispose(disposing);
}

...这是不正确的,因为 _myDisposable 和 _myOtherDisposable 的处置不应取决于组件是否为空。

因此,忽略关于编辑此设计器生成的代码是否是好的做法的争论,并忽略您可以通过编辑模板更改它的事实,我的问题是:为什么设计器不生成代码看起来更像这样?

    protected override void Dispose(bool disposing)
{
if (disposing)
{
if(components != null)
components.Dispose();
}
base.Dispose(disposing);
}

此代码具有相同的最终结果,但在修改过程中更安全且不易出错。

最佳答案

答案是:因为您的方便不是在 Microsoft 编写此功能的人的主要关注点。或者,他们可能认为您作为非 Microsoft 员工,不可能成为一名优秀的程序员,因此,您可能应该远离有风险的业务,例如修改对象的 Dispose() 方法。

顺便说一下,Dispose() 方法位于 .Designer.cs 文件中指定为“不要编辑此设计器生成的代码”的区域之外,因此我认为可以对其进行编辑。

关于c# - 为什么 WinForms 设计器会在其 dispose 方法中生成类似 'inconvenient' 的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8794094/

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