.Net 8 새로운 문법

반응형

기존에 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 를 할당할수 있군요

 

기본 생성자는 두 가지 성질이 있는 것 같습니다.

  1. 항상 호출되어야 함.
  2. 생성자의 매개변수가 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)일 것이라고 생각합니다.

  1. 항상 호출되어야 함.
  2. 생성자의 매개변수의 유효범위는 멤버 초기화 시간 한정.
class C(int i)
{
    public C() : this(1) { }
    private readonly int _i = i; 
    public int Value() => _i + 1; 
    // 에러
    // public int Value() => i++; 
}
 
반응형