gpt4 book ai didi

C# - 为什么我不能将在 using 语句中声明的类作为引用类型传递?

转载 作者:可可西里 更新时间:2023-11-01 02:58:56 29 4
gpt4 key购买 nike

假设我有以下一次性类和示例代码来运行它:

public class DisposableInt : IDisposable
{
private int? _Value;

public int? MyInt
{
get { return _Value; }
set { _Value = value; }
}

public DisposableInt(int InitialValue)
{
_Value = InitialValue;
}

public void Dispose()
{
_Value = null;
}
}

public class TestAnInt
{
private void AddOne(ref DisposableInt IntVal)
{
IntVal.MyInt++;
}

public void TestIt()
{
DisposableInt TheInt;
using (TheInt = new DisposableInt(1))
{
Console.WriteLine(String.Format("Int Value: {0}", TheInt.MyInt));
AddOne(ref TheInt);
Console.WriteLine(String.Format("Int Value + 1: {0}", TheInt.MyInt));
}
}
}

调用 new TestAnInt().TestIt() 运行得很好。但是,如果我更改 TestIt() 以便在 using 语句内部声明 DisposableInt,如下所示:

    public void TestIt()
{
// DisposableInt TheInt;
using (DisposableInt TheInt = new DisposableInt(1))
{
Console.WriteLine(String.Format("Int Value: {0}", TheInt.MyInt));
AddOne(ref TheInt);
Console.WriteLine(String.Format("Int Value + 1: {0}", TheInt.MyInt));
}
}

我收到以下编译器错误:

Cannot pass 'TheInt' as a ref or out argument because it is a 'using variable'

这是为什么?除了在 using 语句完成后类超出范围并进入垃圾收集器之外,有什么不同?

(是的,我知道我的一次性类示例很愚蠢,我只是想让事情简单化)

最佳答案

Why is this?

using 语句中声明的变量是只读的; outref 参数不是。所以你可以这样做:

DisposableInt theInt = new DisposableInt(1);
using (theInt)
{
AddOne(ref theInt);
}

...但从根本上说,您没有使用它是一个 ref 参数这一事实...

您可能误解了 ref 的真正含义。阅读我的 article on parameter passing 是个好主意以确保您真正理解。

关于C# - 为什么我不能将在 using 语句中声明的类作为引用类型传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11636489/

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