아래 글은 C# 컬렉션(Collection) 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

 

 

📃 참고자료

 

  • C# 교과서(길벗 출판사) - 27단원 컬렉션 사용하기 362 ~ 372페이지
  • 유튜브채널 VisualAcademy [C# 교과서 마스터하기 27. 컬렉션 사용하기]
  • 닷넷코리아 (https://www.dotnetkorea.com/)

 

 

 

 

 

https://www.youtube.com/watch?v=-gDdb28VcwQ 

 

 

 

 

 

✳ 컬렉션(Collection) 한줄 정의

 

- 배열(Array), 리스트(List), 딕셔너리(Dictionary)를 사용하여 관련 개체의 그룹을 만들고 관리

 

 

 

 

✳ 자료구조

 

 

 

 

✳ 다양한 C# 예제코드

 

https://github.com/gilbutITbook/006890/tree/master/DotNet/DotNet/27_Collection

 

gilbutITbook/006890

C# 교과서. Contribute to gilbutITbook/006890 development by creating an account on GitHub.

github.com

 

 

 

* C#에서는 자료구조를 쉽게 사용 할 수도록 이미 기능이 구현 되어 있습니다.

  그래서 그 기능을 쉽게 가져다 쓰기만 하면 사용 할 수 있습니다.

 

  하지만 책의 저자는 구현 되어있는 자료구조의 대략적인 개념을 알고 사용하기를 권장하고 있습니다.

반응형

'프로그래밍언어 & 프레임워크 > C#' 카테고리의 다른 글

C# 개체(Object) 만들기  (0) 2021.06.03
C# 널(Null)  (0) 2021.06.02
C# 제네릭(Generic) 사용하기  (0) 2021.05.31
C# 문자열(String) 다루기  (0) 2021.05.27
C# 클래스(Class)  (0) 2021.05.25

 

 

아래 글은 C# 제네릭(Generic) 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

 

 

📃 참고자료

 

  • C# 교과서(길벗 출판사) - 28단원 제네릭 사용하기 373 ~ 381페이지
  • 유튜브채널 VisualAcademy [C# 교과서 마스터하기 28. 제네릭 사용하기]
  • 닷넷코리아 (https://www.dotnetkorea.com/)

 

 

 

 

https://www.youtube.com/watch?v=561J5sYWCEQ 

 

 

 

 

 

✳ 제네릭(Generic) 한줄 정의

 

- Cup<T>를 Cup of T로 발음하여 형식 매개 변수인 T에 따른 Cup 클래스의 개체 생성

 -> 여기서 T는 Type(형식)을 나타냄

 

 

 

 

 

 

✳ 제네릭 사용의 장점(예제코드)

using System.Collections;
using System.Collections.Generic;

namespace 제네릭_장점
{
    class 제네릭_장점
    {
        static void Main(string[] args)
        {
            //[1] 제네릭 사용 전
            Stack s1 = new Stack();
            s1.Push(1234);
            int i1 = (int)s1.Pop(); // cast 필요

            //[2] 제네릭 사용 후
            Stack<int> s2 = new Stack<int>();
            s2.Push(2345);
            int i2 = s2.Pop(); // cast 불필요

            //[3] 장점 1: 타입 안정성
            Stack o = new Stack();
            o.Push(1234);
            o.Push("Hello");
            object oo = o.Pop(); // 가능

            Stack<int> i = new Stack<int>();
            i.Push(1234);
            //i.Push("Bye"); // 컴파일 타임 에러

            //[4] 장점 2: 성능 향상
            Stack stack = new Stack();
            stack.Push(1234); // 1234(값형) to object(참조형) : 박싱(Boxing) : 포장
            int iStack = (int)stack.Pop(); // 참조형 to 값형 : 언박싱(UnBoxing)
        }
    }
}

 

 

 

 

 

 

 

✳ Stack 형식 외에도 List, List, Dictionary 형식의 예제를 아래의 깃헙 링크에서 볼 수 있습니다.

 

https://github.com/gilbutITbook/006890/tree/master/DotNet/DotNet/28_GenericClass 

 

gilbutITbook/006890

C# 교과서. Contribute to gilbutITbook/006890 development by creating an account on GitHub.

github.com

반응형

'프로그래밍언어 & 프레임워크 > C#' 카테고리의 다른 글

C# 널(Null)  (0) 2021.06.02
C# 컬렉션(Collection)  (0) 2021.06.01
C# 문자열(String) 다루기  (0) 2021.05.27
C# 클래스(Class)  (0) 2021.05.25
C# 링크(LINQ)  (0) 2021.05.24

아래 글은 C# 문자열(String) 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

 

 

📃 참고자료

 

  • C# 교과서(길벗 출판사) - 25단원 문자열 다루기 334 ~ 348페이지
  • 유튜브채널 VisualAcademy [C# 교과서 마스터하기 25. 문자열 다루기]
  • 닷넷코리아 (https://www.dotnetkorea.com/)

 

 

 

 

https://www.youtube.com/watch?v=ovmC_58wsNY 

 

 

 

 

✳ 문자열(String) 다루기

 

  • 닷넷 프레임워크에 내장되어 있는 클래스 중에서 문자열 관련 클래스는 문자열의 길이 반환,
    문자열의 공백 제거, 대 / 소문자로의 반환 등의 기능을 하는 메서드 등을 제공합니다.
  • C#의 문자열은 유니코드(Unicode) 문자열이기에 다국어를 지원하고,
    문자열 관련 모든 기능도 다국어를 제대로 처리합니다.



 

✳ String 클래스와 string 키워드

//[?] System.String 클래스 == string 키워드
using System;

class StringClass
{
    static void Main()
    {
        String s1 = "안녕하세요."; // String 클래스
        string s2 = "반갑습니다."; // string 키워드

        Console.WriteLine($"{s1} {s2}"); 
    }
}

 

 

 

 

 

 

✳ 문자열(String) 분리 예제

using System;

namespace 문자열분리
{
    class 문자열분리
    {
        static void Main(string[] args)
        {
            string src = "홍길동,114,2007-12-12,1234";

            string[] records = src.Split(',');

            Console.WriteLine(records[3]);

            for (int i = 0; i < records.Length; i++)
            {
                Console.WriteLine(records[i]);
            }
            Console.WriteLine();


            foreach (var record in records)
            {
                Console.WriteLine(record);
            }
        }
    }
}

 

 

  • CSV(Comma Separated Values) 데이터를 다룰 때 사용 가능

    * CSV란? 몇 가지 필드를 쉼표(,)로 구분한 텍스트 데이터 및 텍스트 파일이다.
반응형

'프로그래밍언어 & 프레임워크 > C#' 카테고리의 다른 글

C# 컬렉션(Collection)  (0) 2021.06.01
C# 제네릭(Generic) 사용하기  (0) 2021.05.31
C# 클래스(Class)  (0) 2021.05.25
C# 링크(LINQ)  (0) 2021.05.24
C# 열거형(Enumeration)  (0) 2021.05.24

 

 

아래 글은 C# 클래스(Class) 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

 

📃 참고자료

 

  • C# 교과서(길벗 출판사) - 24단원 클래스 사용하기 309 ~ 333페이지
  • 유튜브채널 VisualAcademy [C# 교과서 마스터하기 24. 클래스 사용하기]
  • 닷넷코리아 (https://www.dotnetkorea.com/)

 

 

 

 

 

https://www.youtube.com/watch?v=UdBuTGTSzc4 

 

 

 

✳ 클래스란?

- 닷넷의 공용 형식 시스템의 기본 구문 중 하나로 데이터와 함수를 묶어 관리

- 객체를 만들기 위한 청사진(Blueprint)

 

 

 

 

 

✳ 클래스와 개체(Object)

// [클래스]와 [개체] 그리고 [정적 멤버]와 [인스턴스 멤버]
using System;

namespace 클래스와개체
{
    //[1] 클래스 생성
    public class 클래스
    {
        //[1][1] static(shared) 멤버
        public static void 정적멤버() { Console.WriteLine("정적"); }
        //[1][2] instance 멤버
        public void 인스턴스멤버() { Console.WriteLine("인스턴스"); }
    }

    class 클래스와개체
    {
        static void Main()
        {
            //[2] 클래스 사용
            //[2][1] 정적 멤버 사용
            클래스.정적멤버(); // "정적"
            //[2][2] 인스턴스 멤버 사용
            클래스 개체 = new 클래스();
            개체.인스턴스멤버(); // "인스턴스"
        }
    }
}

 

 

 

✳ 클래스와 멤버

namespace 클래스와멤버
{
    //[1][1] 클래스 생성
    public class 클래스
    {
        //[1][2] 멤버 생성
        public static void 멤버()
        {
            System.Console.WriteLine("클래스의 멤버가 호출되어 실행됩니다.");
        }
    }

    public class 클래스와멤버
    {
        public static void Main()
        {
            //[2][1] 클래스 사용
            클래스.멤버();
        }
    }
}

 

 

 

✳ 클래스에 대해 자세히 나와있는 사이트들

 

 

1. csharpstudy

 

http://www.csharpstudy.com/CSharp/CSharp-class.aspx

 

C# 클래스 - C# 프로그래밍 배우기 (Learn C# Programming)

C# class (클래스) C# class 키워드는 Reference Type을 정의하는데 사용된다. 클래스는 메서드 (Method), 속성 (Property), 필드 (Field), 이벤트 (Event) 등을 멤버로 포함하는 소프트웨어 단위로서 보통 이 클래스

www.csharpstudy.com

 

 

 

 

2. https://blog.hexabrain.net/137

 

C# 강좌 10편. 클래스(Class) [최근 수정 2017.11.26]

1. 객체(Object) 이번 강좌에서는 강력한 기능을 제공하는 클래스에 대해서 배우기 전에, 객체 지향 프로그래밍(Object Oriented Programming, OOP)에 대해 알고 넘어가야 하기에 객체 지향 프로그래밍이 도

blog.hexabrain.net

 

반응형

'프로그래밍언어 & 프레임워크 > C#' 카테고리의 다른 글

C# 제네릭(Generic) 사용하기  (0) 2021.05.31
C# 문자열(String) 다루기  (0) 2021.05.27
C# 링크(LINQ)  (0) 2021.05.24
C# 열거형(Enumeration)  (0) 2021.05.24
C# 구조체(Structure Types)  (0) 2021.05.23

 

 

 

 

아래 글은 C# 링크(LINQ) 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

 

📃 참고자료

 

  • C# 교과서(길벗 출판사) - 23단원 열거형 형식 사용하기 299 ~ 308페이지
  • 유튜브채널 VisualAcademy [C# 교과서 마스터하기 23. 열거형 형식 사용하기]
  • 닷넷코리아 (https://www.dotnetkorea.com/)

 

 

 

 

https://www.youtube.com/watch?v=Dk-aBvJ3U1c 

 

 

 

 

 

✳ 링크란?

 

  • C# 언어에 직접 쿼리(Query) 기능을 통합하는 방식을 기반으로 하는 기술 집합 이름
  • 이미 있는 기능(LINQ에 있는 기능)을 사용 가능
    -> for, if문을 사용하면서 발생하는 Side Effect(부작용) 예방 가능

  • LINQ로 배열의 최댓값, 최솟값(확장 메서드) 등 여러 기능이 있다.
  • 메서드 구문(Method Syntax)와 쿼리 구문(Query Syntax)가 있다.

 

 

 

다양한 예제코드를 볼 수 있는 곳

https://github.com/gilbutITbook/006890/tree/master/DotNet/DotNet/30_LINQ

 

gilbutITbook/006890

C# 교과서. Contribute to gilbutITbook/006890 development by creating an account on GitHub.

github.com

 

반응형

'프로그래밍언어 & 프레임워크 > C#' 카테고리의 다른 글

C# 문자열(String) 다루기  (0) 2021.05.27
C# 클래스(Class)  (0) 2021.05.25
C# 열거형(Enumeration)  (0) 2021.05.24
C# 구조체(Structure Types)  (0) 2021.05.23
C# 생성자(Constructor)  (0) 2021.05.22

 

 

아래 글은 C# 열거형 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

 

📃 참고자료

 

  • C# 교과서(길벗 출판사) - 23단원 열거형 형식 사용하기 299 ~ 308페이지
  • 유튜브채널 VisualAcademy [C# 교과서 마스터하기 23. 열거형 형식 사용하기]
  • 닷넷코리아 (https://www.dotnetkorea.com/)

 

 

 

https://www.youtube.com/watch?v=YNl63E5gzGU 

 

 

 

 

✳ 열거형이란?

- 하나의 이름으로 서로 관련있는 정수 값을 갖는 상수 집합을 정의

 

 

 

 

 

 

예제코드

// 온라인 쇼핑몰
// 결제방법: 온라인입금, 신용카드, 포인트결제
// 주문상태: 신규주문, 주문확인, 주문취소
using System;

namespace 열거형
{
    public enum 결제방법
    {
        온라인입금,      // 0
        신용카드,       // 1
        계좌이체        // 2
    }

    public enum 주문상태
    {
        신규주문,               // 0
        주문확인,               // 1
        주문취소 = 9,           // 9
        배송중 = 3,             // 3
        배송완료 = 5,           // 5
        주문완료 = 7            // 7
    }

    class 열거형
    {
        static void Main(string[] args)
        {
            Console.WriteLine($"결제방법 : {결제방법.계좌이체}, {(int)결제방법.계좌이체}");
            Console.WriteLine($"주문상태 : {주문상태.주문완료}, {(int)주문상태.주문완료}");

            결제방법 input = 결제방법.계좌이체;

            switch (input)
            {
                case 결제방법.온라인입금:
                    Console.WriteLine("온라인입금에 맞는 기능 수행");
                    break;
                case 결제방법.신용카드:
                    Console.WriteLine("신용카드에 맞는 기능 수행");
                    break;
                case 결제방법.계좌이체:
                    Console.WriteLine("계좌이체에 맞는 기능 수행");
                    break;
                default:
                    Console.WriteLine("에러/경고");
                    break;
            }
        }
    }
}
반응형

'프로그래밍언어 & 프레임워크 > C#' 카테고리의 다른 글

C# 클래스(Class)  (0) 2021.05.25
C# 링크(LINQ)  (0) 2021.05.24
C# 구조체(Structure Types)  (0) 2021.05.23
C# 생성자(Constructor)  (0) 2021.05.22
C# 필드(Field)  (0) 2021.05.21

 

아래 글은 C# 구조체 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

 

📃 참고자료

 

  • C# 교과서(길벗 출판사) - 22단원 구조체 285 ~ 298페이지
  • 유튜브채널 VisualAcademy [C# 교과서 마스터하기 22. 구조체]

 

 

 

https://www.youtube.com/watch?v=O6g8VAeQS9w 

 

 

 

✳ 구조체란?

 

  • 여러 개의 데이터 형식을 하나로 묶어서 관리하는 개념
  • 하나의 이름으로 여러 데이터 형을 보관
  • 클래스 구조보다 접근이 빠름(스택 사용)
  • 상속 불가능
  • 프로그램 내에서 데이터 보관 용도로 사용

 

 

✳ 데이터 보관 관점 비교

 

  • 변수(Variable)
    - 하나의 이름으로 하나의 데이터 형식을 하나만 보관하는 그릇

  • 배열(Array)
    - 변수 확장
    - 하나의 이름으로 하나의 데이터 형식을 여러 개 보관
  • 구조체(Struct)
    - 변수 / 배열의 확장
    - 하나의 이름으로 여러 개의 데이터 형식을 하나 / 여러 개 보관

 

 

✳ 구조체 선언(Defining) 및 사용

 

 

 

# 구조체 선언

public struct Employee
{
	public string Name;
    public int Age;
}

 

 

# 구조체 사용

 

Employee companyEmployee;
companyEmployee.Name = "RedPlus";
companyEmployee.Age = 21;

 

 

 

✳ 내장된 구조체들

 

 

* 클릭 시 마이크로소프트 Docs로 이동

 

 

반응형

'프로그래밍언어 & 프레임워크 > C#' 카테고리의 다른 글

C# 링크(LINQ)  (0) 2021.05.24
C# 열거형(Enumeration)  (0) 2021.05.24
C# 생성자(Constructor)  (0) 2021.05.22
C# 필드(Field)  (0) 2021.05.21
C# 이벤트(Event)  (0) 2021.05.21

 

 

아래 글은 C# 생성자 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

 

📃 참고자료

 

  • C# 교과서(길벗 출판사) - 35단원 생성자 470 ~ 481페이지
  • 유튜브채널 VisualAcademy [C# 교과서 마스터하기 35. 생성자]

 

 

 

https://www.youtube.com/watch?v=5Qi7VYJKQkE 

 

 

 

 

✳ 생성자 (Constructor)

 

  • 클래스 이름과 동일한 이름을 사용하는 메서드
  • 클래스 실행 시 제일 먼저 실행되는 메서드
  • 클래스(개체)를 초기화 시켜주는 메서드
    -> void 키워드를 붙이지 않고 반환 값도 없음

  • 생성자는 개체를 초기화
    -> 클래스 내의 필드를 초기화

  • 현실 세계에서 자동차의 시동을 거는 동작에 비유

 

 

 

 

✳ 기본 생성자 사용

 

  • 기본 생성자의 특징
    - public 액세스 한정자
    - 클래스명과 동일한 이름사용
    - 반환값도 없고, void도 아님
    - 매개변수가 없음
    - 모든 필드를 zero, false 또는 null로 초기화
  • 생성자 문법
    -> class Data { public Data() { . . . }  }

 

 

 

 

예제코드(생성자의 종류)

using System;

namespace 생성자_종류
{
    // 클래스
    public class Person
    {
        // 필드
        private static readonly string _Name;
        private int _Age;

        //[!] 생성자 종류: 정적(static)과 인스턴스(instance)
        //[1] 정적 생성자
        static Person() { _Name = "홍길동"; }
        //[2] 인스턴스 생성자: 매개변수가 없는 생성자
        public Person() { _Age = 21; }
        //[3] 인스턴스 생성자: 매개변수가 있는 생성자
        public Person(int _Age)
        {
            this._Age = _Age; // this.필드 = 매개변수;
        }

        // 정적 메서드
        public static void Show()
        {
            Console.WriteLine("이름 : {0}", _Name);
        }
        // 인스턴스 메서드
        public void Print()
        {
            Console.WriteLine("나이 : {0}", _Age);
        }
    }
    public class 생성자_종류
    {
        static void Main(string[] args)
        {
            //[1] 정적 생성자 실행
            Person.Show(); // 정적인 멤버 호출

            //[2] 인스턴스 생성자 실행
            Person p1 = new Person(); p1.Print(); // 인스턴스 멤버 호출
            Person p2 = new Person(22); p2.Print();
        }
    }
}

 

 

출처 (https://www.dotnetkorea.com/)

반응형

'프로그래밍언어 & 프레임워크 > C#' 카테고리의 다른 글

C# 열거형(Enumeration)  (0) 2021.05.24
C# 구조체(Structure Types)  (0) 2021.05.23
C# 필드(Field)  (0) 2021.05.21
C# 이벤트(Event)  (0) 2021.05.21
C# 대리자(Delegate)  (0) 2021.05.20

 

아래 글은 C# 필드 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

 

 

📃 참고자료

 

  • C# 교과서(길벗 출판사) - 34단원 대리자 460 ~ 469페이지
  • 유튜브채널 VisualAcademy [C# 교과서 마스터하기 34. 필드(Field)]

 

 

https://www.youtube.com/watch?v=VPCVleg-RiM 

 

 

 

 

✳ 필드란

 

  • 클래스 안에서 선언된 변수(Variable)를 필드
  • 필드는 일반적으로 클래스의 부품 역할을 하며 대부분 private 한정자가 붙음
  • 참고로 C / C++ 등의 언어에서는 해당 범위에서의 전역 변수(Global Variable)와 같은 의미
  • 필드는 클래스가 가지는 속성이며 변수 또는 상수가 위치
    * 상수
      -> const 키워드: C#
      -> final 키워드: Java

 

 

* 읽기 전용(Read-Only) 필드

 

  • public readonly decimal Price;
    -> 대문자로 시작 가능
  • 클래스 내에 선언된 상수와 비슷하나
    -> 선언과 동시에 초기화(같음)
    -> - 또는 -
    -> 생성자를 통해서 초기화(다름)
  • public 액세스 한정자 지정 가능
    -> 필드는 private 액세스 한정자 권장

 

 

* 상수와 읽기전용 필드

 

  • 상수
    -> 컴파일 타임 상수
        => 상수는 컴파일 시 데이터가 저장된다.
    -> 선언과 동시에 초기화
    -> 숫자, 참 또는 거짓, 문자열
    -> 항상 static 으로 호출됨

  • 읽기전용 필드
    -> 런타임 상수
        => 읽기전용 필드는 런타임(실행) 시 데이터가 저장된다.
    -> 선언과 동시 초기화 또는 생성자에 의한 초기화
    -> 모든 데이터 형식
    -> static 선언 가능, 일반적으로 인스턴스

 

 

* 캡슐화 / Information Hiding

 

  • 개체의 데이터는 해당 개체에서만 접근 가능하도록 설정
  • 필드는 private
    -> 외부에 공개가 필요한 것은 뒤에서 배울 속성(property)으로 공개하도록 설정

 

 

 

* 필드 한줄 정의

 

  • 클래스의 부품 역할을 하는 클래스의 내부 상태 값을 저장해놓는 그릇

 

 

 

 

 

예제코드

// 필드.cs
using System;

namespace 필드
{
    public class Person
    {
        //[!] 필드(멤버변수, 전역변수(Global Variable))
        #region 필드 영역(Private Member Variables)
        //[1] 변수 형식의 필드
        public static string name = "박용준";
        //[2] 상수 형식의 필드
        public const int m_age = 21;
        //[3] 읽기전용 형식의 필드
        public static readonly object _NickName = "RedPlus";
        //[4] 배열 형식의 필드
        public static string[] _websites = { "닷넷코리아", "비주얼아카데미" };        
        #endregion

        //[!] 필드 내용 출력 메서드
        public static void ShowProfile()
        {
            // 로컬변수(Local Variable)
            string strWrite = String.Format(
                "이름: {0}\n나이: {1}\n별명: {2}\n", name, m_age, _NickName);
            strWrite += "홈페이지: ";
            foreach (string s in _websites)
            {
                strWrite += s + '\t';
            }
            strWrite += '\n';
            Console.WriteLine(strWrite);
        }
    }

    public class 필드
    {
        //[!] 메서드: Main 메서드
        public static void Main(string[] args)
        {
            // 지역 변수(LocalVariable): 특정 메서드내에서 선언된 변수
            string name = "박용준";
            Console.WriteLine(name);

            //[!] 필드를 public으로 선언했지만, 앞으로는 private을 붙인다. 
            Person.name = "홍길동";
            // Person.m_age = 22; // 이 코드는 실행 안됨
            // Person._NickName = "WhitePlus"; // 이 코드는 실행 안됨
            Person._websites[0] = "dotnetkorea";
            Person.ShowProfile(); // *
        }
    }
}

 

 

* 출처( https://www.dotnetkorea.com/ )

반응형

'프로그래밍언어 & 프레임워크 > C#' 카테고리의 다른 글

C# 구조체(Structure Types)  (0) 2021.05.23
C# 생성자(Constructor)  (0) 2021.05.22
C# 이벤트(Event)  (0) 2021.05.21
C# 대리자(Delegate)  (0) 2021.05.20
C# 속성(Property)  (0) 2021.05.20

아래 글은 C# 이벤트 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

 

 

📃 참고자료

 

 

 

 

https://www.youtube.com/watch?v=C8xtvboY1gI 

 

 

 

#  이벤트

 

  • 특정 상황이 발생할 때 개체 또는 클래스에서 알림을 제공 할 수 있도록 하는 멤버
  • 이벤트는 클래스내에 특정한 일(event)이 있어났음을 외부의 이벤트 가입자(subscriber)들에게 알려주는 기능
  • 클래스 내에서 일종의 필드처럼 정의된다.

 

 

# 이벤트 핸들러(Event Handler)

이벤트에 가입하는 외부 가입자 측에서는 이벤트가 발생했을 때 어떤 명령들을 실행할 지를 지정해 주는데,

이를 이벤트 핸들러라 한다. 이벤트에 가입하기 위해서는 += 연산자를 사용하여 이벤트 핸들러를 이벤트에 추가한다.

반대로 이벤트핸들러를 삭제하기 위해서는 -= 연산자를 사용한다. 하나의 이벤트에는 여러 개의 이벤트핸들러들을 추가할 수 있으며, 이벤트가 발생되면 추가된 이벤트핸들러들을 모두 차례로 호출한다.

 

 

 

 

 

 

예제코드

 

using System;

public class ButtonClass
{
    //[1] 이벤트 생성을 위한 대리자 하나 생성
    public delegate void EventHandler(); // 여러 개 메서드 등록 후 호출 가능

    //[2] 이벤트 선언: Click 이벤트 
    public event EventHandler Click;

    //[3] 이벤트 발생 메서드: OnClick 이벤트 처리기(핸들러) 생성
    public void OnClick()
    {
        if (Click != null) // 이벤트에 등록된 값이 있는지 확인(생략 가능)
        {
            Click(); // 대리자 형식의 이벤트 수행
        }
    }
}

class EventDemo
{
    static void Main()
    {
        //[A] Button 클래스의 인스턴스 생성
        ButtonClass btn = new ButtonClass();

        //[B] btn 개체의 Click 이벤트에 실행할 메서드들 등록
        btn.Click += Hi1; // btn.Click += new ButtonClass.EventHandler(Hi1);
        btn.Click += Hi2; // btn.Click += new ButtonClass.EventHandler(Hi2);

        //[C] 이벤트 처리기(발생 메서드)를 통한 이벤트 발생: 다중 메서드 호출
        btn.OnClick();
    }
    static void Hi1() => Console.WriteLine("C#");
    static void Hi2() => Console.WriteLine(".NET");
}

 

 

반응형

'프로그래밍언어 & 프레임워크 > C#' 카테고리의 다른 글

C# 생성자(Constructor)  (0) 2021.05.22
C# 필드(Field)  (0) 2021.05.21
C# 대리자(Delegate)  (0) 2021.05.20
C# 속성(Property)  (0) 2021.05.20
C# 예외처리하기(Exception)  (0) 2021.05.19

+ Recent posts