try~catch~finally
using System; namespace Study { class Program { static void Main(string[] args) { Console.WriteLine("입력 : "); string input = Console.ReadLine(); try { int index = int.Parse(input); Console.WriteLine("입력 숫자 : " + index); } catch (Exception e) { Console.WriteLine("예외 발생 (int형이 아님)"); Console.WriteLine(e.GetType()); return; } finally { Console.WriteLine("프로그램 종료"); } } } }
catch에서 return하여 finally 절은 무조건 실행된다.(finally 가 없다면 "프로그램 종료" 문구가 나타나지 않고 종료될 것이다).
finally 절에서 return 키워드 같이 finally 절의 본문을 벗어나는 키워드는 사용할 수 없다.
throw 키워드
예외를 강제로 발생시킨다.
throw new Exception();
윈폼 예외처리
위와 같이 리스트 박스와 콤보박스를 이용해 윈폼을 디자인한다.
그 다음 Product 클래스를 만들고 다음과 같이 작성한다.
class Product { public string Name { get; set; } public int Price { get; set; } }
콤보박스와 리스트 박스에 데이터 바인딩을 한다. 데이터 바인딩된 항목 사용에 체크하고 데이터 개체는 Product클래스를 선택한다.
각각 멤버와 값을 선택한다.
이제 다음과 같이 데이터를 추가하면 데이터 박스와 리스트 박스에, 바인딩 된 데이터가 출력될 것이다.
public partial class Form1 : Form { public Form1() { InitializeComponent(); productBindingSource.Add(new Product() { Name = "감자", Price = 500 }); productBindingSource.Add(new Product() { Name = "사과", Price = 700 }); productBindingSource.Add(new Product() { Name = "고구마", Price = 400 }); productBindingSource.Add(new Product() { Name = "배추", Price = 600 }); productBindingSource.Add(new Product() { Name = "감자", Price = 500 }); } }
데이터 그리드뷰도 마찬가지로 데이터 소스를 추가해 활용할 수 있다.
delegator (대리자)
델리게이트는 메소드의 매개변수로 메소드를 전달하기 위한 것이다. 델리게이터는 대리자라고 번역하기도 한다.
말 그대로 어떤 행위를 대신 한다는 것으로, 행위(메소드)를 저장하고 전달하기 위해 나온 개념이다.
델리게이터 선언
delegate void TestDelegate();
델리게이터 자료형으로 변수 초기화
TestDelegate testDelegate = <메서드 이름, 무명 델리게이터, 람다> ( 이것은 델리게이터 변수를 초기화하는 방법이다)
Comparison 델리게이터 ( MSDN : https://msdn.microsoft.com/ko-kr/library/tfakywbh(v=vs.110).aspx )
public delegate int Comparison<in T>( T x, T y )
다음은 Comparison 델리게이터를 이용해 상품의 가격을 정렬하는 예제이다.
아래 예제에서는 Sort 메서드의 매개변수로 SortWithPrice 메소드를 전달한다.
namespace Delegate { class Product { public string Name { get; set; } public int Price { get; set; } } class Program { static void Main(string[] args) { List<Product> products = new List<Product>() { new Product() {Name="감자", Price=500}, new Product() {Name="사과", Price=700}, new Product() {Name="상추", Price=300}, }; products.Sort(SortWithPrice); foreach (var item in products) { Console.WriteLine(item.Name + " : " + item.Price); } } static int SortWithPrice(Product a, Product b) { return a.Price.CompareTo(b.Price); } } }
Comparison은 델리게이트(대리자)로 형식에 맞는 함수를 따로 정의해 두어야 한다.
1 2 3 4 | public static int Compare(float a, float b) { return a.CompareTo(b); } | cs |
'Study > C#' 카테고리의 다른 글
C# MS-SQL 연동 (0) | 2017.04.14 |
---|---|
C# 네트워크 기본 (1) | 2017.04.12 |
C# 인터페이스 (0) | 2017.04.07 |
C# 클래스, 메소드 (0) | 2017.04.04 |
c# 복습 (0) | 2017.03.31 |