【问题标题】:Saving reference in a Field [closed]在字段中保存参考[关闭]
【发布时间】:2012-09-08 11:39:39
【问题描述】:

我正在尝试以下代码:

public partial class Test: Window
{
    public Test(ref List</* Type */> LList)
    {
        [...]
        this.ListField = LList;

    }

    private  List</* Type */> ListField;
}

C# 不会在“ListField”中保存引用。 示例:

Test test = new Test(ref /* List</* Type */>-variable*/)

---------

public partial class Test: Window
{
    public Test(ref List</* Type */> LList)
    {
        [...]
        this.ListField = LList;

    }

    private  List</* Type */> ListField;

    private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        ListField = null;
    }
}

在关闭表单后,提供给public Test(ref List&lt;/* Type */&gt; LList) 的对象没有改变(它不是“null”)。

那么如何在“ListField”中保存引用?

【问题讨论】:

  • 很难理解你的意思。代码看起来有效。

标签: c# reference ref


【解决方案1】:

(我确定这是重复的,但我怀疑由于术语过多,很难找到示例。)

它肯定会在ListField 中保存一个引用。这就是它可以做的一切——ListField 的值永远只能是一个引用,因为List&lt;T&gt; 是一个类。

听起来你真正想要的是保持ref 的别名行为,但 适用于参数 - 从不适用于字段。区分“通过引用传递”作为parameter passing style 和引用本身(对于the difference beteween classes and structs 很重要)是很重要的。

基本上,你不能直接做你想做的事。您可以创建一个Wrapper&lt;T&gt; 类,将ListField 设为Wrapper&lt;List&lt;T&gt;&gt; 并将引用(按值)传递给构造函数,但您不能只使用ref 来做您想做的事情。

【讨论】:

    猜你喜欢
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2021-05-06
    • 2012-12-09
    相关资源
    最近更新 更多