gpt4 book ai didi

c# - C# using 语句自动处理对象的替代语法?

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

我想知道是否有人能想出一种方法来实现一种类似于 C# 中的 using 语句但语法更清晰的机制。

C++/CLR中你可以写

MyClass NewObject;

MyClass 在这里是一个托管类。一旦变量超出范围,就会调用 Dispose。从本质上讲,它与 C# 使用 using 做同样的事情,但方式更好。

所以,而不是写

using (MyClass NewObject1=new MyClass())
{
xxxx;
using (MyClass NewObject2=new MyClass()
{
}
}

(我觉得这看起来不太干净,而且为每个新变量打开一个新 block 也很乏味)

我更喜欢这样的东西:

autodispose MyClass NewObject1=new MyClass();
xxxx;
autodispose MyClass NewObject2=new MyClass();

有人认为有可能实现这样的东西吗?似乎 AOP 框架或代码契约使用注入(inject)代码的机制,但我不确定它们是如何做到的。

最佳答案

MyClass is a managed class here. As soon as the variable goes out of scope Dispose will be called.

这不是真的,即使在 C++/CLR 中也是如此。我的理解是,C++/CLR 仍然依赖核心 .Net 垃圾收集器来管理对象,而不是传统的 C++ 析构函数语义……根据这些规则,对象在未来的某个不确定点被处理;它可能是立竿见影的……但更有可能不是。 可能很快...但您不能确定。

即使在 C# 世界中,using block 也是为非托管 资源(即:RAM 以外的任何资源)保留的。您不需要将任何对象都放在 using block 中:大多数东西都可以在没有一个的情况下安全地创建。当您需要 using block 时,您正在创建的类型中包含网络连接、数据库连接、文件句柄、gdi 资源、系统计时器等内容。

关于c# - C# using 语句自动处理对象的替代语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9591532/

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