0

私は次のコードを試しています:

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</* Type */> LList)は変更されていません (「null」ではありません)。

SO「ListField」に参照を保存するにはどうすればよいですか?

4

1 に答える 1

2

(これは重複していると思いますが、用語のオーバーロードのために例を見つけるのは難しいと思います。)

それは間違いなくに参照を保存しますListField。それができることはそれだけです-はクラスListFieldであるため、の値は参照になることしかできません。List<T>

あなたが本当に望んでいるように聞こえるのは、のエイリアシング動作を維持することですがref、それはパラメータにのみ適用され、フィールドには適用されません。パラメータの受け渡しスタイルとしての「参照による受け渡し」と、それ自体の参照を区別することが重要です(クラスと構造体の違いの点で重要です)。

基本的に、やりたいことを直接行うことはできません。Wrapper<T>クラスを作成し、を作成ListFieldWrapper<List<T>>てコンストラクターに(値で)参照を渡すことはできますが、単に使用refして必要なことを行うことはできません。

于 2012-09-15T16:53:30.490 に答える