'.NET/C#'에 해당되는 글 14건

  1. 2010.03.25 Catch(Exception)
  2. 2010.03.25 Delegate
  3. 2010.03.24 Foreach문
  4. 2010.03.24 사칙연산 프로그램
2010. 3. 25. 19:57

try
{
        SB sb = new SB();
}
catch(Exception e)
{
        Console.WriteLine(e.Message);
}
어떠한 에러가 날라오는지 확인할수 있다.

'.NET > C#' 카테고리의 다른 글

직렬화  (0) 2010.03.27
AS, IS  (0) 2010.03.25
Delegate  (0) 2010.03.25
Foreach문  (0) 2010.03.24
사칙연산 프로그램  (0) 2010.03.24
Posted by 아몰라
2010. 3. 25. 10:47

1. 개념

 만약 어떤 기능을 실행하는 메소드를 호출할 필요가 있을때, 그냥 직접적으로 호출하는 형식입니다.

 델리게이트는 호출하는코드랑 호출되는메서드 사이에 있다고 생각하면 됩니다.

 

어떤 메소드를 호출한다고할때.

델리게이트 사용       : 메소드호출 ---> 델리게이트 ---> 호출당하는 메소드

일반적인메소드호출 : 메소드호출 ---> 호출당하는 메소드

 

즉. 메소트호출쪽은 호출되는메소드를 직접 부르는 것이 아니고 델리게이트를 대신 부르게 됩니다.

 

이처럼 중간자(대리자)역활을 합니다.

 

2. 왜 사용하는지

한마디로 유연성입니다.

저도 첨에책으로만 볼땐 그래서 머! 걍호출하면 되지 웨 써 복잡하게라고 생각했었습니다.

예를들어 폼위에 버튼을 올려놓고 클릭을 하게 되면 클릭이벤트로 가게되죠?

이건 마소에서 처음 .net을 개발할때 버튼콘트롤 소스하고 버튼클릭이벤트메소드(예:button1_Click)

를 델리게이트로 연결했기 때문에 우리가 볼땐 콘트롤을 누르면 이벤트메소드로 가는것처럼 보이는겁니다.

뒤에서는 델리게이트가 중간에 연결을 해주고 있죠!

좀이해가 안가시죠. 그럼 어디에 사용하는지 한번 보죠.

 

3. 어디에 사용하는지

이걸 응용하자면 엄청 많을 것 같은데..

1..한번에 10개의 매소드를 실행하고 싶을때.

    10개의 메소드를 전부 호출하는 것이 아니고.

    델리게이트를 걸어서 델리게이트를 한번호출합니다.

  

2..비동기처리에 사용합니다.

    예를들어 어떤 이벤트가 발생되서 실행되는

    A라는 메소드가 있는데 이놈은 한번 실행하면 최소 10분이상걸리는 놈입니다.]

    보통 델리게이트를 사용하지 않았을 경우 이놈이 끝날때까지 기다린후,다른 처리를 하게되는데.

    델리게이트걸어 비동기화 시켜주게되면 일단 실행이 되고,

    실행이 끝나던말든 다음처리를 할수 있습니다.

    이걸,멀티캐스팅이라고 하나요.

 

  ↓비동기처리의 예  

 using System;

delegate void ShowMessageDelegate(string msg);

class Callable {
  internal void ConcreteShowMessage(string msg) {
    System.Threading.Thread.Sleep(5 * 1000);
    Console.WriteLine(msg);
  }
}

class Caller {
  internal ShowMessageDelegate ShowMessage;

  internal IAsyncResult CallDelegate() {
 
    IAsyncResult ret
        = ShowMessage.BeginInvoke("hello, from delegate!",
            new AsyncCallback(Callback), ShowMessage);
    return ret;
  }

  internal void Callback(IAsyncResult ar) {
    ShowMessageDelegate usedDelegate
        = (ShowMessageDelegate)ar.AsyncState;
    usedDelegate.EndInvoke(ar);
  }
}

class App {
  static void Main() {
    Callable callable = new Callable();
    Caller caller = new Caller();

    caller.ShowMessage
        = new ShowMessageDelegate(callable.ConcreteShowMessage);

    IAsyncResult ar = caller.CallDelegate();

    while(!ar.IsCompleted) {
      System.Threading.Thread.Sleep(500);
      Console.Write(".");
    }
    Console.WriteLine("Done.");
  }
}



출처 : 네이버 아이디: dgnom878

'.NET > C#' 카테고리의 다른 글

직렬화  (0) 2010.03.27
AS, IS  (0) 2010.03.25
Catch(Exception)  (0) 2010.03.25
Foreach문  (0) 2010.03.24
사칙연산 프로그램  (0) 2010.03.24
Posted by 아몰라
2010. 3. 24. 16:46
Foreach

배열과 같은 컬렉션(컨테이너)에 있는 각 요소에대해 특정한 구문을 반복
배열, System.Collenctions, IEnumerable, System.Collections.Generic, IEnumerable<T>


ArrayList list;

private static void ExamForeach()        
            
            foreach (Object o  in list) 
            {
                Console.WriteLine(o.Tostring()); //리스트안에 모든 객체들의 Tostring 함수가 실행된다.
            }
        }

'.NET > C#' 카테고리의 다른 글

직렬화  (0) 2010.03.27
AS, IS  (0) 2010.03.25
Catch(Exception)  (0) 2010.03.25
Delegate  (0) 2010.03.25
사칙연산 프로그램  (0) 2010.03.24
Posted by 아몰라
2010. 3. 24. 16:03

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
           
            Calculator cal = new Calculator();

            Console.WriteLine("수를입력하시오");
            int a = int.Parse(Console.ReadLine());

 //Console.ReadLine은 문자열을 읽어오기때문에 int의 속성에 있는 함수를 통해 형 변환을 시켜준다. 그리고 변수에 대입해준다.

            Console.WriteLine("수를입력하시오");
            int b = int.Parse(Console.ReadLine());

            Console.WriteLine("더하기는~{0}",cal.Add(a, b));
            Console.WriteLine("빼기는~{0}",cal.Sub(a, b));
            Console.WriteLine("나누기는~{0}", cal.Div(a, b));
            Console.WriteLine("곱하기는~{0}", cal.Mul(a, b));
         }
    }
}


namespace test
{
    class Calculator
    {
        public int Add(int a, int b)
        {
            return a + b;
        }
        public int Sub(int a, int b)
        {
            return a - b;
        }
        public int Div(int a, int b)
        {
            return a / b;
        }
        public int Mul(int a, int b)
        {
            return a * b;
        }
    }
}

'.NET > C#' 카테고리의 다른 글

직렬화  (0) 2010.03.27
AS, IS  (0) 2010.03.25
Catch(Exception)  (0) 2010.03.25
Delegate  (0) 2010.03.25
Foreach문  (0) 2010.03.24
Posted by 아몰라
이전버튼 1 2 이전버튼