C#/C#에 대한 다양한 공부(19)
-
Delegate
[Delegate] *델리게이트(Delegate) 번역해보면 '대리자' 라는 의미를 가지고 있다. 말 그대로 무엇인가를 대신할 수 있는 역할을 한다. 델리게이트를 사용하는 이유 만약에 클래스a와 클래스b의 메서드를 호출한다고 생각해보자(혹은 그반대여도). 그러면 a가 b를 참조할 것이고, b에서 a를 참조하는 경우도 생길 수 있다. 즉, 쌍방으로 참조가 생길 수 있다. 하지만 델리게이트는 그러한 쌍방 참조를 끊어낸다. a가 b의 메서드를 델리게이트로 호출한다면 a는 b에 대한 참조를 생기겠지만 b는 a를 모른다. 그래서 무엇을 대신하는 대리자인가. 델리게이트는 메서드를 대신해주는데 메서드의 반환형, 매개 변수 종류와 개수가 모두 일치해야 한다. 델리게이트가 메서드를 대신해준다는건 알겠는데 "메서드를 그냥..
2022.07.01 -
델리게이트, 이벤트
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _0일때_이벤트_발생 { //1. 이벤트를 발생시키기 위한 이벤트 핸들러 델리게이트 선언 public delegate void MyEventHandler(string message); //게시자 클래스 선언 public class Publisher { //2. 이벤트 선언 (참고로 이벤트 선언은 값을 전달하는 쪽에서 선언) public event MyEventHandler MyEvent; public void Do(int number) { //이벤트 게시자가 있는지 유무 체크 if ..
2022.06.01 -
추상클래스, 인터페이스 연습용
using System; using System.Collections.Generic; namespace Delegateex { class Program { static void Main() { test test = new test(); test.Turn(); } } class test : IStudent { public void Turn() { Console.WriteLine("turn"); } public void Right() { Console.WriteLine("right"); } public void Left() { Console.WriteLine("left"); } } public interface IStudent : IParent { void Turn(); void Right(); } publ..
2022.05.24 -
델리게이트와 이벤트를 활용한 콜벡메서드 예제
using System; using System.Collections.Generic; namespace Delegateex { class Program { static void Main(string[] args) { Teacher a = new Teacher(); a.Run(); } } } namespace Delegateex { // 반환형이 없고 매개변수가 int형인 delegate를 // namespace단에 선언합니다. public delegate void MyDel(int score); class Teacher { public void Run() { // 학생 두명 생성 Student1 stu1 = new Student1(); Student2 stu2 = new Student2(); // 각각의..
2022.05.24 -
11-15장
람다 식을 이용한 메소드 using System; namespace study { public class Vector { double x, y; public Vector(double x, double y) { this.x = x; this.y = y; } public Vector Move(double dx, double dy) { return new Vector(x + dx, y + dy); } //람다식을 이용한 메소드 public Vector LamdaMove(double dx, double dy) => new Vector(x + dx, y + dy); } } null 조건 연산자 public static void Main() { List test = new List(); if(test != null..
2022.04.18 -
5-10장
??연산자 using System; namespace study { class Program { static void Main(string[] args) { string test = "hello"; if (test == null) Console.WriteLine("null"); else { Console.WriteLine(test); } string test2 = "world"; Console.WriteLine(test2 ?? "null"); } } } 자동 구현 속성(프로퍼티) class Test { public string Name { get; set; } } class Test2 //C# 6.0버전 이상 { public string Name { get; set; } = "청호"; } 객체 초기화 u..
2022.04.18