变量声明后的括号

亚历山大·马图西亚克

我不熟悉以下语法,并且想知道变量退出括号后会发生什么情况:

public string method(int projectid)
{
    string result = string.empty;
    var service = _service;
    {
         result = service.dosomething(); //_service implements it's own Dispose
    }

    result += "we are going to do some further operations like sum a large list that"
    result += "might take a non-trivial amount of time."

    return result;
}

紧随其后的括号是否_service: { /* etc */ }表示服务变量仅在.dosomething()方法的范围内,以及随后在执行result +=指示的X操作时-垃圾收集器可以对服务进行四舍五入并对其进行垃圾收集?

基本上,我想知道括号var result = service.dosomething()中的内容告诉编译器对serviceand的处理_service

克里斯托斯

该变量在中result是本地变量{ }因此,您无法在外部访问它service

您的代码甚至都不会编译,因为您试图将一个值赋给一个尚未声明的变量。

更新

从您的帖子中可以了解到,您可能想使用一个using称为“一次性对象”的声明,service并且您正在询问引擎盖下发生了什么。

最初,您可以按照以下步骤进行操作:

using(var service = new ...)
{
    result = service.dosomething();
}

...您将在其中放置服务类别的类型。

如果这样做,那么此代码将由C#编译器编译为以下代码

try
{
    ServiceType service = new ServiceType;
    result = service.dosomething(); 
}
finally
{
    if (service != null)
    ((IDisposable)service).Dispose();
}

为了给上面的示例写名字ServiceType我给了这个名字...因此,您应该在此处放置正确的类型。

如您现在所见,该using语句是用于调用DisposeDisposable对象方法的语法糖正如在MSDN中更全面和正式地陈述的那样

通常,使用IDisposable对象时,应在using语句中声明并实例化它。using语句以正确的方式调用对象上的Dispose方法,并且(如前所述,当您使用它时)它还会导致对象本身在调用Dispose时就超出范围。在using块中,该对象是只读的,无法修改或重新分配。using语句确保 即使 在调用对象的方法时发生异常,也将调用Dispose通过将对象放在try块中,然后在finally块中调用Dispose,可以达到相同的结果。实际上,这就是 编译器如何翻译using语句前面的代码示例在编译时扩展为以下代码(请注意,额外的花括号可创建对象的有限作用域)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

变量声明后的括号

来自分类Dev

Objective-C:变量声明后的花括号

来自分类Dev

JS:变量声明后的分号

来自分类Dev

声明后如何使用环境变量

来自分类Dev

函数声明后使用变量(在函数中)

来自分类Dev

struct声明后括号中数字的含义是什么?

来自分类Dev

下拉式声明后,PHP变量将不起作用

来自分类Dev

花括号内的变量声明

来自分类Dev

声明后修改IEnumerator

来自分类Dev

声明后的装饰方法

来自分类Dev

Node.js中的“ require”声明后,空括号是什么意思?

来自分类Dev

在PSR标准中,哪里声明在类型声明后没有变量名?

来自分类Dev

第一个声明后不能覆盖Javascript变量

来自分类Dev

在切换情况下声明后,C ++变量不会更改

来自分类Dev

Shell,bash,linux;变量声明后,为什么要用分号和它做什么?

来自分类Dev

为什么我的类构造变量在声明后保持未定义?

来自分类Dev

使用 StandardJS 时,变量声明后的三元条件被认为是不好的做法

来自分类Dev

类成员声明后冒号?

来自分类Dev

声明后调用构造函数

来自分类Dev

斯威夫特语言:守卫声明后如何继续?

来自分类Dev

声明后如何编辑pulumi资源

来自分类Dev

函数声明后的C ++ throw()(_NOEXCEPT)

来自分类Dev

在Kivy中声明后的无效数据

来自分类Dev

kv 文件:声明后数据无效

来自分类Dev

声明后使用初始值

来自分类Dev

Go中用括号括起来的变量声明语法是什么?

来自分类Dev

花括号在PowerShell变量声明中有什么含义吗?

来自分类Dev

从大括号外部读取时,变量为“未声明”

来自分类Dev

C++ - 声明中变量名后的括号