예외처리
프로그램 도중에 발생하는 의도하지 않은 상황을 처리하는 방법이다.
try ~catch를 이용하여 해당 문제에 대한 예외처리를 해주는 것이다.
try는 예외가 일어나지 않을 경우 실행되어야 할 코드를 작성하는 공간이고,
catch는 예외가 발생하였을 때, 처리할 코드를 작성하는 공간이다.
만일, try에서 여러종류의 예외를 던질 가능성이 있다면 catch도 여러개가 있어야 한다.
try
{
}
catch (Exception e)
{
}
이벤트
일련의 사건이 발생했다는 사실을 다른 객체에게 전달
델리게이트 선언 : 클래스 내에서 선언한 델리게이트 인스턴스를 event 한정자로 선언
이벤트 핸들러 작성 : 이벤트 핸들러는 선언한 델리게이트와 일치하면 OK
클래스에 인스턴스를 생성하고 이 객체의 이벤트에 이벤트 핸들러 등록
이벤트가 발생하면 이벤트 핸들러가 호출이 된다.
이벤트 핸들러 사용
delegate void EventHandler(string str);
class EventTest
{
public event EventHandler eve;
public void func(int num)
{
int temp = num % 10;
if (temp != 0 && temp%3 == 0)
{
eve($"{num}");
}
}
}
internal class Event01
{
public static void MyHandler(string str)
{
Console.WriteLine(str);
}
static void Main(string[] args)
{
EventTest eventTest = new EventTest();
eventTest.eve += new EventHandler(MyHandler);
for (int i = 0; i < 30; i++)
{
eventTest.func(i);
}
}
}
이벤트 핸들러 호출 경로
public delegate void MyDelegate();
public delegate int Calculate(int a, int b);
public delegate void MyEventHandler();
public class DelTest
{
public void MyFunc()
{
Console.WriteLine("델리게이트 메소드 호출");
}
}
public class EventTest01
{
public event MyEventHandler MyEvent;
public void MyEventFunc()
{
Console.WriteLine("이벤트 발생");
}
public void MyEventHandlerFunc()
{
Console.WriteLine("이벤트 핸들러 호출");
}
}
internal class Event01
{
static void Main(string[] args)
{
DelTest intance = new DelTest();
MyDelegate myDelegate = new MyDelegate(intance.MyFunc);
myDelegate();
EventTest01 instance01 = new EventTest01();
// += : 이벤트에 반응할 객체의 추가할 함수 -> 참조 추가
// -= : 이벤트에 반응할 객체의 제거할 함수 -> 참조 제거
// instance01.MyEvent(); //직접 호출은 불가능하다.
// => 람다식 : 익명메소드를 만들기위해 사용.
// 매개변수 목록 => 식
//일반식
Calculate cal;
cal = delegate (int a, int b)
{
return a + b;
};
//람다식
Calculate cal1 = (a, b) => a + b;
Console.WriteLine("{0}", cal(3, 4));
}
}
해당 파트는 어떤 구성으로 돌아가는 지는 감 정도만 오고
아직까진 사용 방향성이라던가, 내부 구조는 잘 모르겠다.
시간에 여유가 남는다면 해당 파트를 조금씩 파보는 것도 괜찮을 것 같다.
델리게이트(delegate)
특정 매개 변수 목록 및 반환형식이 있는 함수에 대한 참조
대리자 인스턴스를 통해 함수를 호출할 수 있다. 델리게이트는 메소드에 대한 참조이다.
델리게이트에 메소드 주소 할당 후, 델리게이트를 호출하면 이 델리게이트가 메소드를 호출해준다.
델리게이트는 메소드에 대한 참조이기 때문에 자신이 참조할 반환형식과 매개변수를 명시.
<정의>
한정자 delegate int 이름(매개변수...)
요약
1. 델리게이트 선언
2. 선언한 델리게이트가 참조할 메소드를 선언(반환형과 매개변수가 일치해야함)
3. 델리게이트가 인스턴스를 만들고 델리게이트가 참조할 메소드를 매개변수로 넘긴다.
4. 델리게이트 호출.(Invoke 메소드 활용)
델리게이트 체인
델리게이트 하나가 여러 개의 메소드를 동시에 참조할 수 있음.(+=, new...)
메소드들을 하나씩 끼워넣으면 순차적으로 호출 가능하다.
한 캐릭터가 여러 동작을 본인의 입맛대로 끼워넣어 Invoke를 호출하면 한번에 여러 동작을 순차적으로 진행한다.
internal class Del2
{
//invoke : 델리게이트에 등록된 메소드들을 순차적으로 실행시킨다.
public delegate void TestDel(int a, int b);
public static void SumNumber(int a, int b)
{
Console.WriteLine($"덧셈 : {a+b}");
}
public static void MulNumber(int a, int b)
{
Console.WriteLine($"곱셈 : {a*b}");
}
static void Main(string[] args)
{
TestDel testDel = SumNumber;
testDel += MulNumber;
testDel.Invoke(10, 20);
}
}
':: 프로그래밍 :: > 수업 내용' 카테고리의 다른 글
2024.03.12 partial, 확장 메소드, this, IEnumerable, Stack Class, Queue Class (0) | 2024.04.08 |
---|---|
2024.03.08 제네릭 메소드, 제네릭 클래스, 형식매개 변수 제약(제네릭) (0) | 2024.03.26 |
2024.03.07 C# default, params, in, out, ref, String class, Array class (0) | 2024.03.26 |
2024.03.06 C#) 구조체/클래스 차이, OOP, 객체지향 설계 5대원칙, 다형성, 추상화, 인터페이스 (3) | 2024.03.14 |
2024.03.05 C#) summary, 얕은복사/깊은복사, 정적변수선언, 정보은닉, 프로퍼티, 상속 (0) | 2024.03.12 |