|
> IEnumerable<Data> を返すメソッドを実装したとき、
> 単純に return _dataList で良いのでしょうか?
> それだと参照が帰るので、取得元で編集できてしまいそうな気がするのですが。
Dataの複製を返せば壊さずに済む
...ただし複製に対して変更をかけたとき
コンパイル/実行時にエラーにできない
using System;
using System.Collections.Generic;
// データの構造(I/Fとして用意)
public class Data
{
public Data() { a = 0; b = 0; }
public Data(Data d) { a = d.a; b = d.b; }
public int a;
public int b;
public void print() { Console.WriteLine("{0},{1}", a, b); }
}
public class DataManager
{
private List<Data> _dataList = new List<Data>();
public void Add(Data value) { _dataList.Add(value); }
public IEnumerable<Data> contains() { foreach (Data d in _dataList) yield return new Data(d); } // 複製を返す
}
public class Program
{
public static void Main()
{
DataManager dm = new DataManager();
dm.Add(new Data());
dm.Add(new Data());
foreach (Data d in dm.contains())
{
d.a = 100;
}
foreach (Data d in dm.contains())
{
d.print();
}
}
}
|