C\#이상 사용 습득
모든 이상 은 Exception 에서 파생 된 것 이다.이 이상 한 유형 들 은 이상 한 속성 을 상세 하 게 설명 합 니 다.여기 서 나 는 새로운 이상 클래스 를 사용자 정의 할 것 입 니 다.사실 이상 한 속성 을 사용자 정의 할 수도 있 습 니 다.(이것 은 선택 할 수 있 습 니 다)그리고 나 는 throw 키 워드 를 사용 하여 이 대상(즉 이상)을 표시 합 니 다.
/// <summary>
///
/// </summary>
class MyException : Exception
{
public MyException(string msg) { }
}
/// <summary>
///
/// </summary>
static void ThrowMyExcetion()
{
throw new MyException("Sorry, this is test!");
}
이상 을 일 으 킨 후,실행 할 때 프로그램 은 현재 문장 이 try 블록 에 포함 되 어 있 는 지 확인 합 니 다.그렇다면 이 try 블록 과 연 결 된 모든 catch 블록 을 검사 하여 catch 가 이상 할 수 있 는 지 확인 합 니 다. catch 블록 은 보통 이상 유형 을 지정 합 니 다.이 catch 블록 의 유형 이 이상 하거나 기본 클래스 와 같 거나 일치 하면 이 catch 블록 을 캡 처 하고 처리 할 수 있 습 니 다.
static void Main(string[] args)
{
try
{
ThrowMyExcetion(); //
}
catch (MyException e)
{
Console.WriteLine(e);
}
Console.Read();
}
이상 을 일 으 키 는 문 구 는 try 블록 에 없 거나 이 문 구 를 포함 하 는 try 블록 에 일치 하 는 catch 블록 이 없 으 면 호출 방법 에 try 구문 과 catch 블록 이 있 는 지 확인 합 니 다.실행 시 호출 스 택 에서 호 환(또는 일치)된 catch 블록 을 계속 위로 검색 합 니 다.catch 블록 을 찾 아 실행 하면 제어 권 은 catch 블록 다음 문장 에 전 달 됩 니 다.
하나의 try 문 구 는 여러 개의 catch 블록 을 포함 할 수 있 습 니 다.이 이상 한 catch 문 구 를 처리 할 수 있 는 첫 번 째 문 구 를 실행 합 니 다.호 환 되 더 라 도 후속 catch 문 구 는 무시 된다.따라서 어떤 경우 에 도 가장 구체 적(또는 파생 정도 가 가장 높 음)에서 가장 구체 적 이지 않 은 순서 로 catch 블록 을 배열 해 야 한다.예 를 들 면:
static void Main(string[] args)
{
StreamWriter sw = null;
try
{
sw = new StreamWriter(@"C:\book\ .txt");
sw.Write("You are 250.");
}
catch (FileNotFoundException e)
{
//
Console.WriteLine(e);
}
catch (IOException e)
{
//
Console.WriteLine(e);
}
catch (Exception e)
{
Console.WriteLine(e);
}
finally
{
if (sw != null)
{
sw.Close();
}
}
Console.Read();
}
catch 블록 을 실행 하기 전에 실행 할 때 finally 블록 을 검사 합 니 다.Finally 블록 은 프로그래머 가 중 단 된 try 블록 이 남 겨 놓 은 모호 한 상 태 를 제거 하거나 외부 자원(예 를 들 어 그래 픽 핸들,데이터 베이스 연결 또는 파일 흐름)을 방출 할 수 있 도록 합 니 다.실행 중인 쓰레기 회수 기 가 이 대상 을 종료 할 때 까지 기다 리 지 않 아 도 됩 니 다.예 를 들 면:
static void Main(string[] args)
{
FileStream fs = null;
FileInfo fi = new FileInfo(@" .txt");
try
{
fs = fi.OpenWrite();
fs.WriteByte(0);
}
finally
{
// , close, IO !
//if (fs != null)
//{
// fs.Close();
//}
}
try
{
fs = fi.OpenWrite();
fs.WriteByte(1);
Console.WriteLine("OK!");
}
catch (IOException e)
{
Console.WriteLine("Fail!");
}
Console.Read();
}
“Fail!”,파일 흐름 을 닫 아야 한 다 는 설명 이 있 기 때 문 입 니 다.설명 을 없 애고 결 과 를 보 세 요.기억 하 세 요.IO 작업 이 끝 날 때 자원 을 방출 해 야 합 니 다.
WriteByte(0)(9 줄)에 이상 이 생기 면 fs.Close()를 호출 하지 않 은 상태 에서 두 번 째 try 블록 에서 Write()코드 를 다시 열 려 고 시도 하 는 데 실패 합 니 다.이 때 파일 이 잠 겨 있 기 때 문 입 니 다.설명 을 취소 하면 finally 블록(이상 이 발생 하 더 라 도)을 실행 하기 때문에 파일 을 정확하게 닫 아서 다시 이상 이 발생 하지 않도록 할 수 있 습 니 다.
이상 을 일 으 킨 후 호출 스 택 에서 일치 하 는 catch 블록 을 찾 지 못 하면 다음 과 같은 상황 이 발생 할 수 있 습 니 다.
4.567917.석조 함수 에 이상 이 나타 나 면 이 석조 함 수 를 중단 하고 기본 클래스 의 석조 함수(있 으 면)를 호출 합 니 다
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.