List<Student> studentlist = new List<Student>();
Student save;
switch(tasktype)
{
case 1:
{
Console.WriteLine("추가할 학생(1. 재학생 2. 졸업생)");
int type = int.Parse(Console.ReadLine());
if(type == 1)
{
save = new Ungrade();
save.set();
}
else if (type == 2)
{
save = new Grade();
save.set();
}
studentlist.Add(save); <- save에서 오류가 뜸 오류명은 할당되지 않은 지역변수를 사용했다고 함.
break;
}
이렇게 했는데
studentlist는
List<Student> studentlist = new List<Student>(); 로 정의하였고 Student는 가상 클래스 입니다.
Student는 Grade와 Ungrade를 자식클래스로 두고 있습니다.
그리고
클래스에 클래스를 대입하면은 C#은 얕은 복사가 일어난다고 합니다.
그래서 내부에 있는 것들을 전부다 일일이 다 해줘야한다고 하는데
일일이 안해주고 그냥 = 이 대입연산자만 사용해서 얕은복사가 안일어나게 하려고 합니다.
사용 용도는 일반화 리스트를 만들어서 그 안에서 클래스를 받아 저장시키는 ADD메소드를 만들려고 합니다.
하나 더 프로퍼티를 쓸 때 내부에 get; set; 이렇게 만들어주는데
set에다가 if문같은 조건문을 넣어서 하려고 하는데 스택오버플로우가 자꾸 나오네요.. 왜 이런걸까요?
느낌상 type 값이 1이나 2가 모두 아닌 것 같은데. type 값이 뭘로 나오니?
type 값이 1이나 2가 아닐 때에도 생각해줘야 함??
퍄..
진짜네
rkatkgkqsl다
클래스에 클래스를 대입하면 C#에서는 참조만 카피되지. 얕은 복사도 아님. 걍 똑같은 객체가 카피되는 거. C#에서는 대입 연산자가 오버로딩되지 않으므로 깊은 복사를 구현하려면 프레임워크의 다른 클래스들처럼 Copy() 메서드를 구현하는 게 일반적.
아 말 실수. 걍 똑같은 객체가 카피되는 게 아니라 걍 똑같은 객체를 가리키고 있는 거임.