728x90

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 { getset; }
    public int Price { getset; }
}



콤보박스와 리스트 박스에 데이터 바인딩을 한다. 데이터 바인딩된 항목 사용에 체크하고 데이터 개체는 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 { getset; }
        public int Price { getset; }
    }
    
    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

+ Recent posts