c#
C#) delegate 대리자
코드를 작성할 때 직관적이고 순차적으로 작성을 한다. 하지만 상대방에게 요청을 보내야 하는 상황이 올 수도 있다. (이때 delegate 사용) delegate int OnClicked(); static void AnyEvent(OnClicked clickedFunction) //clickedFunction (연락처) { clickedFunction(); //함수 호출 (연락을 달라고) } static int Test1() { Console.WriteLine("test1"); return 0; } static int Test2() { Console.WriteLine("test2"); return 0; } static void Main(string[] args) { AnyEvent(Test1); } 1. ..
C#) property
프로퍼티는 속성을 의미한다. public / protected / private 객체 지향 -> 은닉성 getter / setter 구현해야 함 (귀찮음) 아래 예제를 보면 getter/setter가 구현되어 있다. class Archer { private int hp; public int GetHp() { return hp; } public void SetHp(int hp) { this.hp = hp; } } Archer ar = new Archer(); ar.SetHp(100); int hp = ar.GetHp(); 이를 더 간편하게 구현할 수가 있다. class Archer { private int hp; // 초기값 세팅 가능 public int HP { get { return hp; } set ..
C#) interface 인터페이스
abstract class Monster { public abstract void Shout(); } class Orc : Monster { public override void Shout() { Console.WriteLine("orc orc!"); } } class Skeleton : Monster { public override void Shout() { Console.WriteLine("kele kele!"); } } 추상 클래스 Monster안에 추상 메서드 Shout()를 만들고 추상 클래스 Monster를 상속 받는 Orc 와 Skeleton이 있다. class SkeletonOrc : Orc, Skeleton { } 끔찍한 혼종 SkeletonOrc를 만들려고 한다. 그러려면 Orc와 Sk..
C#) Generic 일반화
일반화 클래스 class MyList { T[] arr = new T[10]; public T GetItem(int i) { return arr[i]; } } MyList myIntList = new MyList(); int item = myIntList.GetItem(0); 형식 매개변수의 제약 class 클래스이름 where T : @@@ where T : struct // T는 값 형식이어야 한다. where T : class // T는 참조 형식이어야 한다. where T : new() // T는 어떤 인자도 받지 않는 기본 생성자여야 한다. where T : 기반클래스이름 // T는 기반 클래스의 파생 클래스여야 한다. where T : 인터페이스이름 // T는 인터페이스를 구현해야만 한다. 여..
C#) var & dynamic & object
var C# 3부터 메서드 범위에서 선언된 변수에 암시적 “형식” var을 사용할 수 있다. 암시적 형식 지역 변수는 형식을 직접 선언한 것처럼 강력한 형식이지만 컴파일러가 형식을 결정한다. i의 다음 두 선언은 기능이 동일하다. var i = 10; // Implicitly typed. int i = 10; // Explicitly typed. var사용에는 제약이 있다. 1. 예를 들어 string으로 선언된 var형 변수는 다른 타입으로 변경할 수 없다. 2. var타입으로 선언된 변수는 한 번 이상 무조건 값을 넣어야 한다. dynamic 위의 var 타입에 대한 문제를 해결해주는 것이 dynamic 이다. dynamic은 항상 런타임 시에 데이터 타입을 결정하게 된다. dynamic i; i =..