CS/C#
20240205 C# - TryCatch
싹난 감자
2024. 2. 5. 11:40
using System;
class Program
{
class Error : Exception {
public virtual void Message() {
Console.WriteLine("Error");
}
}
class ArrayError : Error{
public override void Message() {
Console.WriteLine("Array Error");
}
}
class VariableError: Error
{
public override void Message()
{
Console.WriteLine("Variable Error");
}
}
public static void Main(string[] _args)
{
// 예외처리(Exception)
// try ~ catch
Console.WriteLine("Begin");
try
{
// 스택 되감기(Stack Unwinding) 에러를 만나서 빠져나갈때 만들어진 변수를 전부 stack에서 제거한다
// 동적할당해준 경우 해제하기 전에 변수를 지워버리기 때문에 메모리가 미아되는 경우가 있어 신경써야함
Console.WriteLine("Before");
//throw new VariableError();
int[] arr = new int[5];
//arr[7] = 10;
if (arr.Length > 0)
throw new NullReferenceException(); // 이미 만들어진것들도 있음 이거 쓰던지 새로 만들어서 쓰던지. 새로 만들때는 Exception만 상속받게 만들면 됨
Console.WriteLine("Before");
}
catch (Error _error)
{
_error.Message();
}
/*catch(ArrayError _error) { //Exception 클래스를 상속받은 놈들은 catch로 들어갈 수 있음
//Console.WriteLine("Gotcha!");
_error.Message();
}
catch (VariableError _error)
{
_error.Message();
}*/
finally { //try에서 에러가 발생해서 catch로 들어가던지 throw로 catch에 던지던지 finally에는 무조건 들어감
Console.WriteLine("Finally");
}
Console.WriteLine("End");
}
}