3

次の C# 関数に出会いました。

    void SomeMethod(List<ISomeInterface> inputObjects)
    {
        IList<ISomeInterface> newListOfObjects = null;

        if (inputObjects != null)
        {
            //create a new list
            newListOfObjects = new List<ISomeInterface>();
            //copy the input parameter into the new list
            foreach (ISomeInterface thing in inputObjects)
            {
                newListOfObjects.Add(thing);
            }
        }
        //send an event to another module with the new list as parameter
        DelegateHandler.AsyncInvoke(this.SomeEvent, newListOfObjects);
    }   

私の質問は次のとおりです: SomeEvent のパラメーターとなるオブジェクトを作成する必要がありますか? 入力オブジェクトをパラメータとして SomeEvent に渡すとどうなるでしょうか?
おそらく、ガベージ コレクターは inputObjects への参照を認識せず、SomeMethod が終了したときにそれを削除するのではないかと推測しています。

4

3 に答える 3

1

あるリストから別のリストに要素をコピーすると、元のリスト内の要素の同じ参照が保持されます (参照型の場合)。

于 2013-05-15T13:16:27.027 に答える