gpt4 book ai didi

c# - 不好的做法? c# 的 using 语句的非规范用法

转载 作者:IT王子 更新时间:2023-10-29 04:41:24 24 4
gpt4 key购买 nike

C# 有 using 语句,专门用于 IDisposable 对象。据推测,using 语句中指定的任何对象都将持有某种应该确定性释放的资源。

然而,在我看来,编程中有许多设计具有单一的、明确的开始和结束,但缺乏内在的语言支持。 using 构造提供了使用代码编辑器的内置功能的机会,至少可以清楚自然地突出此类设计或操作的范围。

我想到的是那种经常以 BeginXXX()EndXXX() 方法开始的操作,尽管有很多不同的风格,例如作为涉及“开始”和“加入”的异步代码执行。

以这个幼稚的例子为例。

webDataOperation.Start();
GetContentFromHardDrive();
webDataOperation.Join();
// Perform operation that requires data from both sources

相反,如果 Start 方法返回一个对象,该对象的 IDisposable.Dispose 方法执行连接操作。

using(webDataOperation.Start()) {
GetContentFromHardDrive();
}
// Perform operation that requires data from both sources

或者,更好的是,我特别想到的是:我有一个对象,它执行高度特化的图形 blitting,并且有一个 Begin()End() 方法(DirectX 和 XNA 中也有这种设计)。相反……

using(blitter.BlitOperation()) {
// Do work
}
// Use result

它似乎更自然和可读性更好,但它是否不可取,因为它使用了 IDisposable 接口(interface)和 using 语句用于意外目的?换句话说,这是否等同于以非直观方式重载运算符

最佳答案

这是完全可以接受的做法。这些被称为因式分解类型,Framework Design Guidelines建议这样做。

基本上,如果类型包装了具有特定生命周期的操作,则使用 IDisposable 和 using 语句成为需要考虑的适当事项。

我实际上写了关于 this specific topic here 的博客,还有。

关于c# - 不好的做法? c# 的 using 语句的非规范用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1095438/

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