==> 이벤트.cs


using System;

public class 이벤트
{
    public static void Main()
    {
        //[1] 다중메서드 호출
        Hello.Hi1(); Hello.Hi2();

        //[2] 대리자 호출
        Say say;
        say = new Say(Hello.Hi1);
        say += new Say(Hello.Hi2);
        say();

        //[3] 이벤트와 핸들러로 호출
        Button btn = new Button();
        btn.Click += new Say(Hello.Hi1);
        btn.Click += new Say(Hello.Hi2);
        btn.OnClick(); // 실행

    }
}



==============================================================================================


==> Button.cs



using System;
//[!] 대리자
public delegate void Say();

public class Button
{
    //[!] 이벤트 : Click
    public event Say Click; // 형식 : 지정자 + event + 대리자이름 + 이벤트이름;
    
    //[!] 이벤트 처리기(핸들러)
    public void OnClick()
    {
        if (Click != null)
        {
            Click();
        }
    }
}

public class Hello
{
    public static void Hi1()
    {
        Console.WriteLine("안녕");
    }

    public static void Hi2()
    {
        Console.WriteLine("반가워");
    }

}

'.NET프로그래밍 > C# 3.5 SP1' 카테고리의 다른 글

56. 클래스복습  (0) 2009.08.14
55. 무명메서드  (0) 2009.08.13
53. 대리자(Delegate)  (0) 2009.08.13
알고리즘 - 11. 병합정렬(Merge)  (0) 2009.08.13
알고리즘 - 10. 검색(Search)  (0) 2009.08.13
Posted by holland14
:


==> 대리자.cs


using System;

public class 대리자
{
    //[!] 대리자 선언
    public delegate void GoHome(); // 매개변수가 없는 대리자
    public delegate void Gop(int a); // 매개변수가 있는 대리자
    public delegate int Hap(int a, int b); // 반환값이 있는 대리자
    public static void Main()
    {
        //[1] 다중 메서드 호출
        Car car = new Car();
       
        car.Run();
        car.Left();
        car.Right();

        //[2] 대리자를 통해서 대신 호출
        GoHome go; //[a] 대리자형 변수(개체) 선언
        go = new GoHome(car.Run); //[b] 메서드 등록
        go += new GoHome(car.Left); // Add(=car.Left 추가)
        go += new GoHome(car.Right);
        go -= new GoHome(car.Left); // Remove(=car.Left 삭제)
        go(); //[c] 대신 호출

        //[3] 매개변수가 있는 메서드 대신 호출
        Gop gop = new Gop(car.Test);
        gop(2);
        gop(4);

        //[4] 반환값 테스트
        Hap hap = new Hap(car.Sum);
        Console.WriteLine(hap(3, 5));
    }
}



/*

대리자는 클래스 밖에 선언할 수도 있다.

*/



==============================================================================================



==> Car.cs



using System;

public class Car
{
    public void Run()
    {
        Console.WriteLine("전진");
    }
    public void Left()
    {
        Console.WriteLine("좌회전");
    }
    public void Right()
    {
        Console.WriteLine("우회전");
    }

    // 매개변수가 있는 메서드
    public void Test(int a)
    {
        Console.WriteLine((a * a));
    }

    // 반환값이 있는 메서드
    public int Sum(int a, int b)
    {
        return (a + b);
    }

}
   


   

'.NET프로그래밍 > C# 3.5 SP1' 카테고리의 다른 글

55. 무명메서드  (0) 2009.08.13
54. 이벤트(Event)  (0) 2009.08.13
알고리즘 - 11. 병합정렬(Merge)  (0) 2009.08.13
알고리즘 - 10. 검색(Search)  (0) 2009.08.13
52. 정수형인덱서와 문자열인덱서  (0) 2009.08.13
Posted by holland14
:

// 병합(MERGE): 두개의 배열을 합치기(정렬하면서 합치기???)
// 오름차순으로 나열된 두 그룹의 데이터를 한 그룹의 데이터롤 병합한다.
//(1) 데이터 a, b 중에 어느 한 쪽이 끝에 도달할 때까지 다음을 반복
//(2) a(i)와 b(j)를 비교해서 작은쪽을 c(K)에 복사하고 작은 쪽 번호를 +1한다.
//(3) 둘 중에 아직 끝까지 도달하지 않은 데이터를 끝까지 복사한다.
using System;

public class 병합정렬
{
    public static void Main()
    {
        //[1] Input : 원본 데이터가 정렬되어있다고 가정
        int[] first = { 1, 3, 5 };
        int[] second = { 2, 4 };
        int[] merge = new int[first.Length + second.Length]; // MERGE될 배열
        int i = 0; int j = 0; int k = 0;
        int M = first.Length;
        int N = second.Length;
        //[2] Process
        while (i < M && j < N) // 모두 끝에 도달할 때까지
        {
            if (first[i] <= second[j])
            {
                merge[k++] = first[i++];
            }
            else
            {
                merge[k++] = second[j++];
            }
        }
        while (i < M) // 첫번째 배열이 끝까지 도달할 때까지
        {
            merge[k++] = first[i++];
        }
        while (j < N) // 두번째 배열이 끝까지 도달할 때까지
        {
            merge[k++] = second[j++];
        }

        //[3] Output
        for (i = 0; i < merge.Length; i++)
        {
            Console.WriteLine(merge[i]); // 1, 2, 3, 4, 5 출력되도록...
        }
    }
}

'.NET프로그래밍 > C# 3.5 SP1' 카테고리의 다른 글

54. 이벤트(Event)  (0) 2009.08.13
53. 대리자(Delegate)  (0) 2009.08.13
알고리즘 - 10. 검색(Search)  (0) 2009.08.13
52. 정수형인덱서와 문자열인덱서  (0) 2009.08.13
51. 인덱서(Indexer)  (0) 2009.08.13
Posted by holland14
:

using System;

public class 이진검색
{
    public static void Main(string[] args)
    {
        //[1] Input
        int[] data = { 1, 3, 5, 7, 9 }; //[!] 오름차순 정렬되었다고 가정하고...
        Console.WriteLine("찾을 데이터 : ");
        int search = Convert.ToInt32(Console.ReadLine());
        bool flag = false; // 찾았으면 true 그렇지 않으면 false
        int index = -1; // 찾은 위치
        int low = 0; int mid = 0; int high = 0; // 이분탐색 관련 변수
        low = 0; high = data.Length - 1;
        //[2] Process
        #region 순차검색
        for (int i = 0; i < data.Length; i++)
        {
            if (data[i] == search)
            {
                flag = true;
                index = i;
            }
        }
        #endregion

        while (low <= high)
        {
            mid = (low + high) / 2; // 중간값(검색할 데이터)
            if (data[mid] == search)
            {
                flag = true; index = mid; break;
            }
            if (data[mid] < search)
            {
                low = mid + 1;
            }
            else
            {
                high = mid - 1;
            }
        }

        //[3] Output
        if (flag)
        {
            Console.WriteLine("{0}를 {1}위치에서 찾았습니다.", search, index);
        }
        else
        {
            Console.WriteLine("찾지 못했습니다.");
        }
    }
}

'.NET프로그래밍 > C# 3.5 SP1' 카테고리의 다른 글

53. 대리자(Delegate)  (0) 2009.08.13
알고리즘 - 11. 병합정렬(Merge)  (0) 2009.08.13
52. 정수형인덱서와 문자열인덱서  (0) 2009.08.13
51. 인덱서(Indexer)  (0) 2009.08.13
50. 속성(Property)  (0) 2009.08.13
Posted by holland14
:

==> 인덱서.cs


using System;

public class 인덱서
{
    public static void Main()
    {
        //[1] 레코드 생성
        Record r = new Record();

        //[2] 데이터 저장
        r.SetNum(1);
        r.SetName("홍길동");

        //[3] 데이터 출력
        Console.WriteLine(r.GetData(1)); // 홍길동
        Console.WriteLine(r[1]); // 홍길동
        Console.WriteLine(r["Name"]); // 홍길동
    }
}



==============================================================================================



==> Record.cs


using System;
using System.Collections;

public class Record
{
    private int num;
    private string name;
    private Hashtable data = new Hashtable();
    public void SetNum(int num)
    {
        this.num = num; // 1이 저장
        data["Num"] = num;
    }

    public void SetName(string name)
    {
        this.name = name; // 홍길동
        data["Name"] = name;
    }

    public string GetData(int index)  // 메서드
    {
        if (index == 0)
        {
            return this.num.ToString();
        }
        else
        {
            return this.name;
        }
    }

    public string this[int index]  // 정수형인덱서
    {
        get { return GetData(index); }
    }

    public string this[string index]  // 문자열인덱서
    {
        get { return Convert.ToString(data[index]); }
    }
}

Posted by holland14
:

==> 인덱서.cs


using System;

public class 인덱서
{
    public static void Main()
    {
        #region Car
  Car hyundai = new Car(3);
        hyundai[0] = "에쿠스";
        hyundai[1] = "소나타";
        hyundai[2] = "산타페";

        for (int i = 0; i < hyundai.Length; i++)
        {
            Console.WriteLine(hyundai[i]);
        }
 #endregion

        Person saram = new Person();
        // 문자열 인덱서
        saram["닉네임"] = "RedPlus";
        saram["주소"] = "Incheon";
        Console.WriteLine(saram["닉네임"]);
        Console.WriteLine(saram["주소"]);
    }
}



==============================================================================================


==> Car.cs


using System;
//[1] Class
public class Car
{
    //[2] Property
    public int Length { get; set; }

    //[3] Constructor
    public Car()
    {
        // Empty
    }

    public Car(int length)
    {
        this.Length = length;
        catalog = new string[length]; // 요소수 생성
    }

    //[4] Field
    private string[] catalog; // 배열 생성
   

    //[5] Indexer
    public string this[int index]
    {
        get { return catalog[index]; }
        set { catalog[index] = value; }
    }

}



==============================================================================================



==> Person.cs


using System;
using System.Collections;

public class Person
{
    //[1] 문자열 인덱서
    public string this[string index]
    {
        get { return (string)names[index]; }
        set { names[index] = value; }
    }

    //[2] Key/Value 저장 필드
    Hashtable names = new Hashtable();
}

Posted by holland14
:

==> 속성.cs


using System;

public class 속성
{
    public static void Main()
    {
        #region Car 클래스
        Car sonata = new Car();

        sonata.Name = "소나타";
        sonata.Color = "Red"; // set

        Console.WriteLine(sonata.Color); // get

        sonata.Run(); // Red/소나타
        #endregion

        Person na = new Person();
        na.Name = "홍길동";
        na.Birth = "1988-02-05";
        Console.WriteLine(na.Age); // 22

    }
}


==============================================================================================


==> Car.cs


using System;

public class Car
{
    private string _Name; // 필드
    public string Name // 속성
    {
        get { return _Name; }
        set { _Name = value; }
    }

    private string _Color;// 필드
    public string Color // 속성
    {
        get { return _Color; }
        set { _Color = value; }
    }

    public void Run()
    {
        Console.WriteLine("{0},{1}", _Name, Color);
    }

}


==============================================================================================


==> Person.cs


using System;

public class Person
{  
    // 2.0까지
    private string _Name;
    public string Name
    {  
        get { return _Name; }
        set { _Name = value; }
    }

   
    // 쓰기 전용 생성 : 추가 로직
    private string _Birth;
    public string Birth
    {
        set
        {
            _Birth = value; // 넘겨온 값을 필드에 셋팅
            Age = DateTime.Now.Year - Convert.ToDateTime(value).Year + 1;
        }
    }

    // 3.5부터 : prop
    public int Age { get; set; }
   
}

 

/*
 - private한 필드를 public속성으로 외부에 공개
 - value는 넘겨온 값을 의미한다.
*/

Posted by holland14
:

using System;

// Overload : 다중정의(여러번 정의) <-> Override : 재 정의(다시 정의)
public class 메서드오버로드
{
    public static void Main()
    {
        Sum(100); // 1~100까지 합
        Sum(10, 20); // 10~20까지 합
        Sum(1, 100, 2); // 1~100까지 2의 배수(짝수)의 합
    }

    private static void Sum(int p, int p_2, int p_3)
    {
        int sum = 0;
        for (int i = p; i <= p_2; i++)
        {
            if (i % p_3 == 0)
            {
                sum += i;
            }
        }
        Console.WriteLine(sum);
    }

    private static void Sum(int p, int p_2)
    {
        int sum = 0;
        for (int i = p; i <= p_2; i++)
        {
            sum += i;
        }
        Console.WriteLine(sum);
    }

    private static void Sum(int p)
    {
        int sum = 0;
        for (int i = 1; i <= p; i++)
        {
            sum += i;
        }
        Console.WriteLine(sum);
    }
   
}

'.NET프로그래밍 > C# 3.5 SP1' 카테고리의 다른 글

51. 인덱서(Indexer)  (0) 2009.08.13
50. 속성(Property)  (0) 2009.08.13
47. 메서드(Method)  (0) 2009.08.12
46. 소멸자(Destructor)  (0) 2009.08.11
45. 생성자(Constructor)  (0) 2009.08.11
Posted by holland14
:

using System;

public class 메서드
{
    public static void Main()
    {
        int a = 10;
        int b = 20;
        int c; // 초기화하지 않음 => 어차피 Test에 의해서 초기화 된다면 그 시간도 아끼겠다...

        Test(a, ref b, out c);
        Console.WriteLine("메인 : a : {0}, b : {1}, c : {2}", a, b, c); // 10, 200, 300

        // 매개변수로 단일데이터 넘겼을때
        TestParams(10); // 값 설정
        int[] data = { 10, 20 }; TestParams(data); // 배열 설정
        TestParams(new int[] { 10, 20, 30 }); // 참조 설정

        // 매개변수로 가변데이터 넘겼을때
        TestParams(10, 20); TestParams(10, 20, 30); TestParams(10, 20, 30, 40);
       

    }

    public static void TestParams(params int[] arr)
    {
        foreach (int item in arr)
        {
            Console.WriteLine("{0}", item);   
        }
    }

    public static void Test(int a, ref int b, out int c)
    {
        a = 100; b = 200;
        c = a + b; // c를 할당
        Console.WriteLine("테스트 : a : {0}, b : {1}, c : {2}" , a, b, c); // 100, 200, 300
    }
}

Posted by holland14
:

using System;
//[1] Class
public class Car
{
    //[2] Field
    private string name;

    //[3] Method
    public void Run()
    {
        Console.WriteLine("{0} 자동차가 달립니다.", name);
    }

    //[4] Constructor
    public Car() { }
    public Car(string name) { this.name = name; }
    static Car() { }

    //[5] Destructor
    ~Car()
    {
        Console.WriteLine("{0} 자동차를 폐차합니다.", name);
    }
}

public class 소멸자  // LIFO : 나중에 생성된 객체가 먼저 소멸
{
    public static void Main()
    {
        Car sonata = new Car("소나타"); sonata.Run();
        Car santafe = new Car("산타페"); santafe.Run();
    }
}

'.NET프로그래밍 > C# 3.5 SP1' 카테고리의 다른 글

49. 메서드 오버로드(Method Overload) - 다중정의(=여러번 정의)  (0) 2009.08.13
47. 메서드(Method)  (0) 2009.08.12
45. 생성자(Constructor)  (0) 2009.08.11
44. 필드(Field)  (0) 2009.08.11
43. 클래스(Class)  (0) 2009.08.11
Posted by holland14
: