아카이빙 101

[C#] 이벤트와 델리게이트

[C#] 이벤트와 델리게이트이벤트를 선언하고 사용하는 절차는 다음과 같다.1. 델리게이트를 선언delegate void EventHandler(string msg);2. 선언한 델리게이트의 인스턴스를 event 한정자로 선언class Notifier { public event EventHandler SomethingHappened; public void DoSomething(int num) { int temp = num % 10; ​ if (temp != 0 && temp % 3 == 0) { SomethingHappened(String.Format("{0} : 짝", num)); } } }3. 이벤트 핸들러 작성. 1에서 선언한 델리게이트와 일치하는 메소드면 가능class MainApp { public..

아카이빙/C# 2018.06.25

[C#] Delegate와 익명메소드

[C#] Delegate와 익명메소드익명 메소드란 이름이 없는 메소드다.한 번 사용하고 다시 사용할 일이 없을 것 같다면 익명메소드를 사용하는 게 편하다.Delegate 선언delegate int Calculate(int a, int b);메인static void Main() { Calculate calc1, calc2; calc1 = delegate (int x, int y){return x + y;}; calc2 = (x, y) => {return x - y;}; ​ Console.WriteLine(calc1(5, 6)); Console.WriteLine(calc2(5, 6)); }11 -1calc1(더하기)을 더욱 간단히 구현한게 calc2(빼기) 이다. calc2 와 같은 방식은 람다식이라고 부르..

아카이빙/C# 2018.06.25

[C#] Delegate는 언제 사용하는가

[C#] Delegate는 언제 사용하는가대표적으로 메소드를 매개변수로 넘기고 싶을때정렬 시, 비교 루틴을 매개변수로 넣어보자.Delegate 선언delegate int Compare(T a, T b);오름차순, 내림차순 메소드static int AscendCompare(T a, T b) where T : IComparable { return a.CompareTo(b); } ​ static int DescendCompare(T a, T b) where T : IComparable { return a.CompareTo(b) * -1; }Compare delegate를 매개변수로 받는 정렬 메소드static void BubbleSort(T[] dataSet, Compare Comparer) { T temp;..

아카이빙/C# 2018.06.25

[C#] Delegate (대리자)

[C#] Delegate (대리자)Delegate란?특정 매개변수들이나 반환형식이 있는 메소드에 대한 참조를 나타내는 형식 (C/C++의 함수 포인터)Delegate를 인스턴스화하면 모든 메소드가 있는 인스턴스를 호환되는 반환형식에 연결할 수 있으며, Delegate의 인스턴스를 통해 메소드를 호출 할 수 있다.메소드를 다른 메소드에 인수로 전달하는 데에 사용된다.콜백 메소드를 정의할 수 있다.사용 예class MainApp { //string을 인수로 받고, void를 반환하는 delegate 선언 public delegate void Del(string message); ​ public static void DelegateMethod(string message) { Console.WriteLine("..

아카이빙/C# 2018.06.25

[C#] 제네릭의 형식 제약

[C#] 제네릭의 형식 제약제네릭 클래스나 메소드에서 T는 모든 데이터형식을 대신 할 수 있다.그런데 종족 특정 조건에 해당하는 데이터형식만 받고 싶을 때가 있다.이럴때는 형식에 제약 조건을 줄 수 있다.where 형식 변수 : 제약조건제약조건 classclass ArrayGeneric where T : class { private T[] arr; public T GetElement(int index) {return arr[index];} }T는 참조 형식이어야 한다.위의 예제에서 T에 int나 float과 같은 값 형식은 들어올 수 없다.따라서, ArrayGeneric arr = new ArrayGeneric()와 같은 코드는 컴파일에러가 발생한다.제약조건 structclass ArrayGeneric ..

아카이빙/C# 2018.06.21

[C#] 제네릭 클래스

[C#] 제네릭 클래스제네릭 클래스는 어떠한 형식을 일반화한 클래스이다.제네릭 메소드를 이해했다면 쉽게 이해가능class ArrayInt { private int[] arr; public int GetElement(int index) {return arr[index];} } ​ class ArrayFloat { private float[] arr; public float GetElement(int index) {return arr[index];} }위의 두 클래스의 필드와 메소드는 데이터 형식만 다르고 내용은 완전히 같다.제네릭 클래스 예시class ArrayGeneric { private T[] arr; public T GetElement(int index) {return arr[index];} }제네..

아카이빙/C# 2018.06.21

[C#] foreach 가능한 객체 만들기

[C#] foreach 가능한 객체 만들기인덱서와 IEnumerable, IEnumerator 인터페이스를 활용하여 foreach가 가능한 객체를 만들수 있다.IEnumerableIEnumerator GetEnumerator() : IEnumerator 형식의 객체를 반환IEnumeratorboolean MoveNext() : 다음 요소로 이동한다. 컬렉션의 끝을 지나면 false, 이동 성공하면 true 반환void Reset() : 컬렉션의 첫 번째 위치의 앞으로 이동.Object Current {get;} : 컬렉션의 현재 위치를 반환Item 클래스class Item { public string Name{get;set;} public int Count{get;set;} ​ public overrid..

아카이빙/C# 2018.06.20

[C#] 인덱서

[C#] 인덱서인덱서(Indexer)는 인덱스를 이용해서 객체 내의 데이터에 접근하게 해주는 프로퍼티이다.인덱서 선언class 클래스이름 { 한정자 인덱서형식 this[형식 index] { get { // index를 이용하여 내부 데이터 변환 } set { // index를 이용하여 내부 데이터 저장 } } }Item 클래스를 정의하고, Item 배열을 필드로 갖는 ItemList 클래스에 인덱서를 활용해보자Item 클래스class Item { public string Name{get;set;} public int Count{get;set;} ​ public override string ToString() { return string.Format("(Name : {0}, Count : {1})", Na..

아카이빙/C# 2018.06.20