코드를 살펴보십시오. 엿볼 수있는 시간이 오래 걸리지 않아야합니다. GetCourse()
이후리스트 <T>이 해결되었습니다.
class Teacher
{
private int _id;
public int ID
{
get { return _id; }
set { _id = value; }
}
private string _message;
public string Message
{
get { return _message; }
set { _message = value; }
}
public Teacher(int id, string msg)
{
_id = id;
_message = msg;
}
private List<Course> _items;
public List<Course> GetCourses()
{
return _items;
}
public Teacher()
{
if (_items == null)
{
_items = new List<Course>();
}
_items.Add(new Course(1, "cpp"));
_items.Add(new Course(1, "java"));
_items.Add(new Course(1, "cs"));
}
public void Show()
{
Console.WriteLine(this._id);
Console.WriteLine(this._message);
}
public void ShowList()
{
foreach(Course c in _items)
{
c.Show();
}
}
}
class Course
{
private int _id;
public int ID
{
get { return _id; }
set { _id = value; }
}
private string _message;
public string Message
{
get { return _message; }
set { _message = value; }
}
public Course(int id, string msg)
{
_id = id;
_message = msg;
}
private List<Teacher> _items;
public List<Teacher> GetTeachers()
{
return _items;
}
public Course()
{
if(_items == null)
{
_items = new List<Teacher>();
}
_items.Add(new Teacher(1, "ttt"));
_items.Add(new Teacher(1, "ppp"));
_items.Add(new Teacher(1, "mmm"));
}
public void Show()
{
Console.WriteLine(this._id);
Console.WriteLine(this._message);
}
public void ShowList()
{
foreach (Teacher t in _items)
{
t.Show();
}
}
}
class Program
{
static void Main(string[] args)
{
Teacher t = new Teacher();
t.ID = 1;
t.Message = "Damn";
t.Show();
t.ShowList();
t.GetCourses().Clear();
t.Show();
t.ShowList();
Console.ReadLine();
}
}
는 Teacher
인스턴스 내의 기본 Course
-list 클리어된다 t.GetCourses().Clear();
을 호출 _items의 참조를 반환한다.
이 동작을 방지하고 싶습니다. 즉, GetCourse()
은 목록을 반환하지만 수정할 수는 없습니다.
어떻게 달성할까요?
이제 C#에서 어떻게 이루어 졌습니까? 나는 C# 루프를 벗어났다. 그러나 그런 새로운리스트를 만들거나 어떻게 든리스트를 복제 하겠는가? 목록에 전체 목록을 복사하는 방법이 포함되어 있다고 의심됩니다. –
@ 토마스 : 딥 클론을 만들려면 'List'에 아무것도 없다고 생각합니다. 복제는 내 경험으로 크게 낙담됩니다. –