'c#'에 해당되는 글 14건

  1. 2007.11.26 MDI 폼 예제
  2. 2007.11.10 하고 싶은게 너무 많아 감당을 못할때
  3. 2007.09.23 레퍼런스와 상속
  4. 2007.08.29 [C#] 스레드 예제
Study - Programming/C#2007. 11. 26. 01:00

사용자 삽입 이미지


using System;
using System.Windows.Forms;

class MyClass : Form
{
    Button[] btn = new Button[4];
    Form[] newMDICHild = new Form[10];
    string[] strData = { "수평", "수직", "계단식", "아이콘" };

    public MyClass(string strText)
    {
        this.Text = strText;
        this.IsMdiContainer = true;
        this.Load += new EventHandler(this.Form_Load);
        this.Closed += new EventHandler(this.Form_Closed);

        for (int i = 0; i < 4; i++)
        {
            btn[i] = new Button();
            btn[i].Text = strData[i];
            btn[i].SetBounds(50 * i, 10, 50, 50);
            btn[i].Click += new EventHandler(this.Btn_Click);
            this.Controls.Add(btn[i]);
        }

        this.Show();
    }

    public static void Main(string[] args)
    {
        Application.Run(new MyClass("MDI"));
    }

    private void Form_Load(object sender, System.EventArgs e)
    {
        Console.WriteLine("윈도우에 자식창을 생성");
        Form[] newMDIChild = new Form[10];
        for(int i = 0 ;i < 10 ; i++)
        {
            newMDIChild[i] = new Form();
            newMDIChild[i].Text = i + "번째 자식창";
            newMDIChild[i].MdiParent=this;
            newMDIChild[i].Closed += new System.EventHandler(this.Form_Closed);

            newMDIChild[i].Show();
        }
    }
    private void Form_Closed(object sender, System.EventArgs e)
    {
        Console.WriteLine(((Form)sender).Text + "윈도우가 Closed됩니다.");
    }

    private void Btn_Click(object sender, System.EventArgs e)
    {
        if ((Button)sender == btn[0])
        {
            this.LayoutMdi(MdiLayout.TileHorizontal);
            this.Text = "수평 바둑판 정렬";
        }
        else if ((Button)sender == btn[1])
        {
            this.LayoutMdi(MdiLayout.TileVertical);
            this.Text = "수직 바둑판 정렬";
        }
        else if ((Button)sender == btn[2])
        {
            this.LayoutMdi(MdiLayout.Cascade);
            this.Text = "계단식 정렬";
        }
        else if ((Button)sender == btn[3])
        {
            this.LayoutMdi(MdiLayout.ArrangeIcons);
            this.Text = "아이콘 정렬";
        }
    }
}

  후.. 요즘 윈도우 프로그래밍에 맛들여서.. 이런거 공부해 보는게 마냥 재미있네. 어쨋든 슬럼프였는데 갈길을 찾아서 다행이다. 시험 기간 제대로 돌입하기전에는 열심히 해봐야지.

  C#문법을 조금만 아는 사람이라면 금방 파악할 수 있을 것이다. 그만큼 쉽고 편리하게 구현하는게 가능하다. 실제 윈폼 구현은 다 IDE를 이용해서 하지만 콘솔로도 이렇게 간단하게 할 수가 있다. 특히 이벤트 구현을 저렇게 쉽게 해줄 수 있다니.. MFC/API를 사용할때와 비교해서 이렇게 차이가 난다. VB를 해보았다면 그때의 기억을 살리면서 신나게 해볼 수 있을 것이다. 아 앞으로 배울 것들이 엄청 기대된다.

Posted by 머리
나의 이야기/Note2007. 11. 10. 01:01
  지금 내가 공부 하고 있는 언어들을 한번 세어 보면

1. C
2. C++
3. JAVA
4. C#
5. VB.NET
6. Delphi

  여기에 세부 분야까지 넣어 보면
1. API
2. MFC
3. TCP/IP

  뭐 이정도. 문제는 이런 것들을 그냥 배워 보고 싶다는 생각에 건드려만 본다는 것이다. C/C++이야 항상 만지고 있는 거니 예외라 치고, 델파이는 거의 안하니 제외 해도 너무 하려고 하는게 많다. 특히 C#이랑 JAVA는 의욕에 비해 하는게 너무 없는듯하다.

  지금 생각은 이렇다. 한 두가지 정도만 집중할것이냐 조금만 더 힘낼 것이냐. 솔직히 말해서 조금 버겁긴 하지만 그렇다고 못하겠는건 아니다. 그냥 진도가 너무 안나가는 것에 대한 불안감?

  그래도 대학 와서 내가 이쪽 분야 그동안 공부했던것과 비교해 본다면 결코 무리라는 생각은 안든다. 다만 걱정되는건 어린 시절 근 10년간 VB를 파 오면서 너무 공부하기에는 어렸었다는 것도 있었겠지만 여러가지를 많이 해보고 싶어서 이것 저것 해보다가 어중간하게 얕고 넓게(?) 익히게 되어서 그게 반복되지 않을까 신경쓰인다.

  1월 안에는 윈어플 큰거 하나 짜놓고 가긴 가야 하는데.. 제일 승산 있는게 무엇일까? 제일 승산있는건 MFC나 C#쪽인데.. 아무래도 최근에 새로 배우는 언어는 C#이 제일 무난하게 나가고 있어 조금만 더 하면 윈폼 시작할것이니. 아니면 지금 텀 프로젝트한다고 공부중인 MFC도 요즘들어 뭔가 감이 잡혀가기 시작해서 조금만 더 노력하면 속도가 붙을 것 같은데..

  이렇게 해봐야 겠다. JAVA로는 뭐 만드는건 잠시 미루되 꾸준히 공부는 하고 MFC는 텀에 충실하되 실력이 늘 수 있게, 그리고 C#으로는 뭘 만들도록 주로 공부해 봐야지. 이렇게 실천할수 있으면 얼마나 좋아.
Posted by 머리
Study - Programming/C#2007. 9. 23. 22:18

다음 그림을 한번 보자.

사용자 삽입 이미지

위 그림의 코드를 보면 Chile 클래스는 Parent 클래스를 상속받아 있다. 그리고 Child는 Parent의 Show() 메서드를 오버라이드 했고, 추가로 Func()라는 메소드를 가지고 있다.

그럼 이젠 Main() 함수를 보자. 처음에는 Parent 형으로 obj라는 객체를 만들고 Parent 인스턴스를 만들어 참조했다.  물론 이 상태에서 Show를 하면 Parent의 Show()가 실행된다.
그럼 다음 줄로 넘어가 obj를 Child인스턴스에 참조시켜 보자. 물론 Show()메서드는 Child의 Show()가 실행된다. 그런데 그 다음줄로 넘어가 Func()를 실행시키려 시도해 보자. 일단 위 그림에서 자동완성의 목록에는 Func()가 없다. 그냥 무시하고 Func()를 타이핑해서 빌드 해 보자.
사용자 삽입 이미지
  위 그림을 보면 오류가 나온다. 간단히 테스트의 목적으로 만든 코드인데 한번 자세히 알아보자.

  우선 obj라는 객체는 Parent형으로 되어 있다. 즉 Parent의 틀을 가지고 있다는 것이다. 그러므로 obj = new Parent();로 해 놓으면 당연히 Parent의 모든 메서드를 사용하는 것이 가능하다.
  그러나 obj = new Child();로 해 놓으면 어떨까? obj의 '틀'은 Parent이다. 그런데 참조한 인스턴스는 Child이다. Child는 어떻게 되어 있는가? Parent를 상속받아 놓고 거기다 Show()를 오버라이드 한 다음 Child만의 Func()를 포함하고 있다. 즉 Parent라는 '틀'은 Child가 상속받고 있는 Parent관련 멤버들 및 오버라이드 함수만 레퍼런스 할 수 있고, Child만의 멤버인 Func는 사용할 수 없다는 이야기이다.
  솔직히 이게 무엇을 의미하는지 결론적으로는 잘 모르겠다. 다만 이런 식의 코드를 많이 보아 왔었는데 이게 어떻게 성립하는지 이해가 안되었다가 이해를 할 수 있게 되었다.
  폴리모피즘은 OOP에서도 어려운 개념이라고 들었다. 나도 다른 개념은 충분히 사용해 보면서 할 수 있겠는데 이 부분은 영 난해해서 힘들다. 공부를 더 해봐야 겠다.
Posted by 머리
Study - Programming/C#2007. 8. 29. 01:30

using System;
using System.Threading;

public class ThreadExam1
{
    public static void Print1()
    {
        Console.WriteLine("첫 번째 Thread **");
    }

    public void Print2()
    {
        Console.WriteLine("두 번째 Thread **");
    }

    public static void Main()
    {
        Thread thread = new Thread(new ThreadStart(Print1));
        thread.Start();
        thread = new Thread(new ThreadStart((new ThreadExam1()).Print2));
        thread.Start();

        Console.WriteLine("세 번째 Thread");
    }
}


솔직히 말해 모르겠다 이거 뭐하는건지.. 스레드의 정의 자체는 알겠는데 이게 어떤 의미인지를 잘 모르겠다;; 일단 델리게이트 부분부터 다시 봐서 이 코드가 어떻게 돌아가는지부터 다시 공부해 봐야지..

Posted by 머리