gpt4 book ai didi

c# - 使用 "using"时的意外行为

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

我可以使用用户定义的类型,比如使用 block 中的类吗?当我使用时:

  1. 它说,我需要继承IDisposable并实现Dispose方法。我继承并尝试定义 Dispose 方法,但我做不到。它向我展示了它不是公开的或其他什么:(请用一段关于如何实现它的小代码帮助我理解这一点。

  2. 如果我在“using”括号内创建一个类的实例,虽然这个变量的范围只在那个 using block 内,但为什么我不能用同一个变量创建同一个类的另一个实例在使用之外?我认为没有充分的理由 :( 我的推理是否正确?但是我可以使用相同的变量在 using 之外实例化另一个类(这样做可以吗?因为我没有看到编译错误),尽管我很清楚我们应该练习编码指南(但从概念上讲我正在寻求逻辑)......

请帮忙,我是 C# 的新手

最佳答案

using 语句的全部意义在于调用 IDisposable 接口(interface)中指定的 Dispose 方法。

是的,在实现接口(interface)时,要么方法需要公开,要么需要使用显式接口(interface)实现:

// Via a public method
public class Foo : IDisposable
{
public void Dispose()
{
// Stuff
}
}

// Via explicit interface implementation
public class Bar : IDisposable
{
void IDisposable.Dispose()
{
// Stuff
}
}

这里没有关于 IDisposable 的具体内容 - 它只是正常的接口(interface)实现。

你不应该仅仅为了它而实现 IDisposable - 这个想法是它应该为你清理 - 如果你没有任何清理要执行,你也不需要 using 语句。

至于第二点:您根本不允许声明与仍在范围内的另一个局部变量同名的局部变量。读起来会很困惑,因此被禁止。来自 C# 规范的第 8.5.1 节:

The scope of a local variable declared in a local-variable-declaration is the block in which the declaration occurs. It is an error to refer to a local variable in a textual position that precedes the local-variable-declarator of the local variable. Within the scope of a local variable, it is a compile-time error to declare another local variable or constant with the same name.

请注意,您可以在一个方法中仍然两次使用相同的局部变量名称,前提是它们不同时都在范围内:

void M()
{
using (Stream x = ...)
{
}

using (Stream x = ...)
{
}

for (int x = 0; x < 10; x++)
{
}

// Block introduced just for scoping...
{
string x = "";
...
}
}

关于c# - 使用 "using"时的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11594120/

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