전체 글 102

[C#] 람다식 (Lambda Expression)

[C#] 람다식 (Lambda Expression)람다식은 익명 메소드를 만드는 하나의 방법이다. (또 다른 방법은 delegate를 이용)보다 분명하고 간결한 방법으로 함수를 묘사하기 위함기본 람다식의 형식delegate int Del(int a, int b); static void Main() { //매개변수목록 => 식 Del d1 = (int a, int b) => a + b; Console.WriteLine(d1(5, 8)); ​ //형식 유추(Type Inference) Del d2 = (a, b) => a + b; Console.WriteLine(d2(5, 8)); }문 형식의 람다식 (Statement Lambda)delegate void DoSomething(); static void M..

아카이빙/C# 2018.06.26

[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