private void PrintArea(List<Shape> shapes)
{
foreach (var shape in shapes)
{
switch (shape)
{
// const pattern
case null:
WriteLine("Skip");
break;
// type pattern
case Circle c:
WriteLine($"원: {c.Radius * c.Radius * Math.PI}");
break;
case Rect r when r.Width == r.Height:
WriteLine($"정사각형: {r.Width * r.Width}");
break;
case Rect r:
WriteLine($"사각형: {r2.Width * r2.Height}");
break;
default:
WriteLine("모르는 모양");
break;
}
}
}
class Shape {}
class Circle : Shape { /* 생략 */ }
class Rect : Shape { /* 생략 */ }
switch (mark)
{
case int n when n >= 80:
Console.WriteLine("Grade is A");
break;
case int n when n >= 60:
Console.WriteLine("Grade is B");
break;
case int n when n >= 40:
Console.WriteLine("Grade is C");
break;
default:
Console.WriteLine("Grade is D");
break;
}
ref: 쓰기가능
in: 쓰기 불가
out: 쓰기 필수
if (list == null)
list = new List<int>();
list ??= new List<int>();
var a = new {Name = "Name", Description = ""};
배열을 a[] = b[] 와 같은 식으로 대입 시 참조값만 복사가 된다. 따라서 값만을 복사하고 싶을 경우는 a[] = b[].Clone() as int[]; 와 같이 사용해야 한다.
Static 키워드는 순서대로 컴파일됨으로 주의가 필요하다.
readonly 속성은 new 키워드로 override 해도 소용이 없다, 그대로 readonly 이다.
✔️ 속성 setter에서 예외가 throw되는 경우 이전 값을 유지하세요.
❌ 속성 getter에서 예외를 throw하면 안 됩니다.