C#2010. 3. 31. 13:36
#. 다른사람에게 프로젝트를 받아서 내 PC에서 실행시키는 경우 ["파일경로" 명령이 1 코드에서 끝났습니다.] 대충 이런 글귀의 에러가 발생하면서 실행이 안되는 경우 확인하는 방법.
 - 파일경로중 한글이 포함되어 있다면 한글을 제거하고 다시 실행하면 실행이 가능합니다.
Posted by 쿵캉켕
C#2010. 3. 31. 10:13

#. Managed Code
 - .NET 프레임워크 환경에서 동작하는 코드로 CLR(Common Language Runtime)에 적용받는 코드입니다. managed code의 경우 .NET 실행환경에 의해 제공되는 기능들(ex. 가비지 컬렉션 등)을 그대로 이용할 수 있습니다. C#, VB.NET, ASP.NET등이 managed code에 포함됩니다.

#. Unmanaged Code
 - Unmanaged code, 또는 Native code라고 불리우며 CLR에 적용 받지 않고 개발자가 사용하고 있는 PC의 윈도우 운영체제상에서 동작하는 코드를 말합니다. 이럴 경우 각 운영체제에 따라 동작이 안될 수도 있습니다. 예를 들면 Visual Studio 6.0까지의 VC++ 6.0을 들 수 있습니다.

Posted by 쿵캉켕
C#2010. 3. 23. 13:27

1. delegate(델리게이트)
#. 내용
 - 프로그램에서 어떤 기능을 대신 수행해 주는 대리자 역할을 하게됩니다.
 - 델리케이트는 일종의 메소드 포인터로 메소드를 효율적으로 사용하기 위한 캡슐화를 위해 주로 사용 합니다.
 - event를 구현하기 위해 선언 합니다.

#. 메소드 대리자 델리게이트
 - 델리게이트는 class와 같은 위치에서 선언해 줍니다.
 - 델리게이트를 인스턴스화 시킬 때 반드시 메소드를 참조시켜야 합니다.
 - 선언 형식은 선언할 메소드(함수)와 동일란 형식으로 선언되어야 합니다. 즉, 위임 메소드는 대리자와 형식이 일치해야 합니다.
 - 예제

001: using System;

002: //델리게이트 선언

003: delegate void dele1();

004: delegate int dele2(int a,int b);

005: class MainClass

006: {

007:    static void Main(string[] args)

008:    {

009:           //Math클래스 선언및 인스턴스화

010:           MathClass MathClass=new MathClass();

011:           //델리게이트 선언및 인스턴스화

012:           dele1 Sum1=new dele1(MathClass.Intro);

013:           dele2 Sum2=new dele2(MathClass.Sum);

014:           //델리게이트에 위임된 메서드 실행

015:           Sum1();

016:           Console.WriteLine("Result : {0}",Sum2(-10,90));

017:    }

018: }

019: class MathClass

020: {

021:    public void Intro()

022:    {

023:           Console.WriteLine("계산을 시작합니다.");

024:    }

025:    public int Sum(int a, int b)

026:    {

027:           return a+b;

028:    }

029: }
 - 결과
계산을 시작합니다.
Result : 80


#. 델리게이트의 연산
 - 델리게이트는 Combine과 Remove라는 두개의 연산 메소드를 지원합니다. 이것으로 인해 델리게이트는 여러 메소드의 참조가 가능합니다.
  -> Combine: 기존 위임에 또 위임을 추가합니다.[=+]
  -> Remove: 기존의 위임중에 특정 위임을 제거합니다.[=-]
 - 아래 예제의 15줄에서 +=로 메소드를 추가한 Math는 Plus(10), Minus(10), Multiply(10) 이렇게 3개의 메소드를 차례대로 호출하는 것과 같은 의미를 갖게 됩니다.
 - 아래 예제의 22줄에서처럼 -=로 메소드를 삭제하면 Math는 Plus(10), Multiply(10)만을 위임받게 됩니다.
 - 예제

001: using System;

002: delegate void deleMath(int Value); //델리게이트 선언

003: class MainClass

004: {

005:    static void Main(string[] args)

006:    {

007:           //Math클래스 선언및 인스턴스화

008:           MathClass MathClass=new MathClass();

009:          

010:           //델리게이트 선언및 인스턴스화(덧셈)

011:           deleMath Math=new deleMath(MathClass.Plus);

012:

013:           //위임연산(뺄셈,곱셈추가)

014:           Math+=new deleMath(MathClass.Minus);

015:           Math+=new deleMath(MathClass.Multiply);

016:           //결과1

017:           MathClass.Number=10;

018:           Math(10);

019:           Console.WriteLine("Result:{0}",MathClass.Number);

020:

021:           //위임연산(뺄셈제거)

022:           Math-=new deleMath(MathClass.Minus);

023:           //결과2

024:           MathClass.Number=10;

025:           Math(10);

026:           Console.WriteLine("Result:{0}",MathClass.Number);

027:

028:           //위임연산(곱셈제거)

029:           Math-=new deleMath(MathClass.Multiply);

030:           //결과3

031:           MathClass.Number=10;

032:           Math(10);

033:           Console.WriteLine("Result:{0}",MathClass.Number);

034:

035:    }

036: }

037: class MathClass

038: {

039:    public int Number;

040:    public void Plus(int Value)//더하기

041:    {

042:           Number+=Value;

043:    }

044:    public void Minus(int Value)//빼기

045:    {

046:           Number-=Value;

047:    }

048:    public void Multiply(int Value)//곱하기

049:    {

050:           Number*=Value;

051:    }
052: }

 - 결과
Result:100
Result:200
Result:20


2. event(이벤트)
#. 내용
 - 프로그램 상에서 행해지게 되는 일련의 행위들을 가리킵니다.
 - 마우스를 클릭하는것, 키보드를 입력하는것, 윈도우 창을 움직이는 것 이런 것들이 모두 이벤트 입니다.
 - 각 이벤트에가 발생할 경우 어떻게 처리하겠다는 코드를 작성할 수 있습니다.
 - 델리게이트를 통해 구현됩니다.

#. 구현
 - event 선언된델리게이트명 이벤트명;

#. 예제

001: using System;

002: //델리게이트 선언

003: delegate void eventDelegate();

004: class EventTest

005: {

006:    // Event1 이라는 우리만의 새로운 이벤트를 선언해 주고,

007:    // 이 이벤트의 처리는 eventDelegate 타입의 delegate들이

008:    // 하게 된다는 것을 알립니다.

009:    public event eventDelegate ckEvent;

010:    // 어떤 버튼을 누를 때, 이 메서드가 호출된다고 가정 합시다.

011:    public void btnClick()

012:    {

013:           ckEvent();

014:    }

015: }

016: class MainClass

017: {

018:    static void Click()

019:    {

020:           Console.WriteLine("클릭 되었습니다.");

021:    }

022:    static void Main(string[] args)

023:    {

024:           //클래스 선언및 인스턴스화

025:           EventTest eTest = new EventTest();

026:          

027:           // 미리 정의한 이벤트 즉,ckEvent가 발생한 경우

028:           // eTest 라는 인스턴스에서 이 이벤트를 처리할 메서드

029:           // (핸들러, Delegate)를 지정합니다.

030:           eTest.ckEvent += new eventDelegate(MainClass.Click);

031:

032:           // 어떤 버튼이 눌려서 클릭 이벤트가 발생되었다고 가정합니다.

033:           eTest.btnClick();

034:    }
035: }

#. 결과
계산을 시작합니다.
Result : 80

출처: 훈스닷넷(http://www.hoons.kr/)

Posted by 쿵캉켕
C#2010. 3. 15. 15:37

#. as 연산자
 - as 연산자는 형식 변환 연산시 사용됩니다. 다만 캐스트 연산과 다른 점은 변환이 가능하지 않는 경우 예외를 발생하지 않고 null이 반환된다는 것입니다. 즉, as 연산자는 as 뒤에 나오는 타입이 아니면 null을 반환 합니다.
 - as 연산자는 오직 참조 변환과 boxing 변환만을 수행하며, 사용자 정의 변화과 같은 다른 변환을 수행할 수 없습니다.

ex>
    static void Main()
    {
        object[] objArray = new object[3];
        objArray[0] = "hello";
        objArray[1] = 123;
        objArray[2] = null;

        for (int i = 0; i < objArray.Length; ++i)
        {
            string s = objArray[i] as string;
            Console.Write("{0}:", i);
            if (s != null)
            {
                Console.WriteLine("'" + s + "'");
            }
            else
            {
                Console.WriteLine("not a string");
            }
        }
    }

결과 값>
0:'hello'
1:not a string
2:not a string


#. is 연산자
 - 특정 객체와의 타입과 호환이 가능한지 확인하는 연산자 입니다.
 - 호환이 가능한 경우 true를 반환하고, 호환이 가능하지 않은 경우 예외를 발생하지 않고 false를 반환합니다.
 - is 연산자는 참조 변환, boxing 변환, unboxing 변환만을 수행하며, 사용자 정의 변환과 같은 다른 변환은 고려되지 않습니다.

ex>
string strTemp = new string();

Bool b1 = (strTemp is string);
Bool b2 = (strTemp is int);

Console.WriteLine("b1: {0}, b2: {1}", b1, b2);

결과 값>
b1: true, b2: false
Posted by 쿵캉켕