반응형
기존에 Class 를 생성하고 Property를 생성하는 방법입니다.
public class ClassOld
{
public string Name { get; set; }
public int age { get; set; }
public ClassOld(string _name , int _age)
{
Name = _name;
age = _age;
}
public void Test1()
{
Console.WriteLine($"{Name} / {age}");
}
}
대단히 익숙한 방법일것니다.
8.0에서는 이렇게 되는군요
public class ClassNew(string name, int age)
{
public void Test1()
{
Console.WriteLine($"{name} / {age}");
}
}
Class 선언부에서 Argument 먹이듯이 property 를 할당할수 있군요
기본 생성자는 두 가지 성질이 있는 것 같습니다.
- 항상 호출되어야 함.
- 생성자의 매개변수가 private 멤버 변수가 됨.
두 번째가 조금 성급한 결정 같아 보입니다.
readonly 가 붙어야 한다 말아야 한다는 논의도 중요하지만, 상태의 2중 저장에 대한 컴파일러 경고 문제도 있더군요.
예를 들면, 아래 코드에서 #1 코드는 #2 의 존재 여부에 따라 경고가 뜨기고 하고 안 뜨기도 합니다.
class C(int i)
{
public C() : this(1) { }
private readonly int _i = i; // #1
public int Value() => i++; // #2
}
두 번째 가정만 없앤다면, 논란 없는 꿀 문법(Syntactic sugar)일 것이라고 생각합니다.
- 항상 호출되어야 함.
- 생성자의 매개변수의 유효범위는 멤버 초기화 시간 한정.
class C(int i)
{
public C() : this(1) { }
private readonly int _i = i;
public int Value() => _i + 1;
// 에러
// public int Value() => i++;
}
반응형