gpt4 book ai didi

c# - 方法接口(interface)参数作为引用问题

转载 作者:太空宇宙 更新时间:2023-11-03 22:16:45 25 4
gpt4 key购买 nike

如果有人有更好的标题,请告诉我。

我做了一个 DisposeHelper 而不是这个:

private Something _thing;

void Dispose()
{
if(_thing != null)
{
_thing.Dispose();
_thing = null;
}
}

...我可以这样做:

private Something _thing;

void Dispose()
{
DiposeHelper.Dipose(ref _thing);
}

但显然我无法将 IDisposable 提供给 DisposeHelper.Dispose 作为引用,除非我将 Something 转换为 IDisposable,如下所示:

private Something _thing;

void Dispose()
{
IDisposable d = _thing;
DiposeHelper.Dipose(ref d);
}

...这意味着它不会使原始字段无效。

这是一个更抽象的例子。 DoThis 有效,DoThat 无效:

public class Test
{
public Test()
{
Something o = new Something();

DoThis(o);

DoThat(ref o);
}

private void DoThis(IFoo obj) { }

private void DoThat(ref IFoo obj) { }
}

public class Something : IFoo { }

public interface IFoo { }

为什么我做不到?

最佳答案

我不知道您为什么不能这样做的技术原因。

然而,这有效:

var o = new Something();
DoThat(ref o);

private void DoThat<T>(ref T obj) where T : class, IFoo {
obj = null;
}

关于c# - 方法接口(interface)参数作为引用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4836700/

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