... | ... | @@ -223,7 +223,44 @@ public class Person |
|
|
|
|
|
* **람다 식을 이용한 method, property 및 index 정의**
|
|
|
C# 언어에는 클래스가 직관적으로 배열처럼 다뤄질 수 있을 때 사용하기 쉽도록 this keyword를 이용한 indexer라고 하는 특별한 구문을 제공한다.
|
|
|
```cs
|
|
|
public class Vector
|
|
|
{
|
|
|
double x, y;
|
|
|
public Vector(double x, double y)
|
|
|
{
|
|
|
this.x = x;
|
|
|
this.y = y;
|
|
|
}
|
|
|
|
|
|
public double Angle => Math.Atan2(y, x);
|
|
|
|
|
|
public double this[string angleType] => angleType == "radian" ? this.Angle : angleType == "degree" ? RadinToDegree(this.Angle) : double.NaN;
|
|
|
|
|
|
public double RadinToDegree(double angle) => angle * (180.0 / Math.PI);
|
|
|
|
|
|
public override string ToString()
|
|
|
{
|
|
|
return string.Format("x = {0}, y = {1}", x, y);
|
|
|
}
|
|
|
|
|
|
public Vector Move(double dx, double dy) => new Vector(x + dx, y + dy);
|
|
|
public void PrintIt() => Console.WriteLine(this);
|
|
|
}
|
|
|
|
|
|
class Program
|
|
|
{
|
|
|
static void Main(string[] args)
|
|
|
{
|
|
|
Vector vec = new Vector(90, 180);
|
|
|
vec.Move(1, 1);
|
|
|
vec.PrintIt();
|
|
|
Console.WriteLine(vec["radian"]);
|
|
|
Console.WriteLine(vec["degree"]);
|
|
|
Console.WriteLine(vec["error"]);
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
* **using static 구문을 이용한 타입명 생략**
|
|
|
생성자의 경우 method긴 하지만 예외적으로 람다 식을 이용해 구현할 수 없다.
|
|
|
|
... | ... | |