Tag Archives: C#

.NET FRAMEWORK예찬

계층적으로 이뤄진 클래스

win32에서 뒤죽박죽 찾기도 힘들던 API들이…

.net에 와서 깔끔하게 정리가 됐다.

 

파일에 관련된… 인풋 아웃풋을 하고싶다면?

System.IO.에서 찾아보면 다 나온다.

MSDN까지 갈 것도 없이…System.IO 에서… ‘.’만 찍으면 나온다.

위대한 VisualStudio2010…

2010년까지… MS에서 나온 최고의 작품인 것 같다.

이제 비주얼 프로그래밍까지 완성된다면.. 모두의 프로그래밍이 완성될듯…

이 부분은 얘네보다 먼저 내가 만들어봐야지….MS에 팔아먹어야지.. ㅋ

 

System.IO.Pipe도 있고..

 

.NET에서 라이브러리 종류도 많아져서…

그냥 생각하는 기능은…MSDN에 검색하면 웬만하면 다 나온다.

 

정말 날 위해 만들어진 기술인 것만 같다.

unmanaged c++에서 .net의 라이브러리를 꺼내서 쓸 수만 있다면 정말 좋을텐데….

 

로또1등이나 당첨되거나 해서…

생활에 여유가 생기면 한번 만들어 볼까 싶다.

 

실력은 안되지만… 하다보면 길이 생기더라..

이것저것 만들어보면서 든 생각은…. 생각할 수 있는 것은 다 만들 수 있더라… 라는것…

필요한 것은 상상력… 그리고 노가다력…

C# 책을 쓴다면 목차와 분류

분류

1. 꼭 외워야 할 부분.

2. 읽어보고 찾아보면 될 부분

이 부분 궂이 쓸 피요 없음..MSDN검색방법으로 처리…

C언어 C++공부 해 본 사람 대상으로 200페이지 미만, 2만원 미만 책으로 완성하는게 목표.

가능하면 어플로도 출시.

 

목차 – 1. 꼭 외워야 할 부분

1. 콘솔 예시 Hello World

프로그램 구조 설명, WriteLine함수, 명령어 설명, HelloWorld문자열 설명, 세미콜론, 네임스페이스

…등 모든 부분

2. 변수

int, decimal까지만 변수 기본개념, 메모리 공간할당 개념, ConsoleWriteLine를 통한 변수출력연습.

3. 데이터 타입과 변수의 종류

데이터 타입의 종류, byte에서부터 ulong까지…decimal까지…bool…

System.String, System.Int32 등의 객체도 설명. int와 System.Int32의 차이 등..

4. 문자열

char string의 사용법..Console.WriteLine으로 사용법, string의 선언과 사용법..

string는 c언어의char[]과 어떻게 다른가. 문자열의 +결합.

5. Console.WriteLine의 서식 사용

Console.WriteLine(“{0}아아아{1}마마마{2}”,3,’A’,”안녕”); 사용방법 설명.

Console.WriteLine(“{0,5:C}”,10000); //이렇게 하면 출력은 10,000W 이렇게 된다.

http://msdn.microsoft.com/ko-kr/library/828t9b9h.aspx

6. 배열

배열 선언방법 1차원 배열 int [] arr

2차원 배열 int [,] arr

3차원이상… int [,,] arr

재그 배열

int [][] arr

7. 열거형

enum Fruits { 사과, 배, 당근}

숫자대입하는거나 등등

8. 연산자 종류

ㄱ.산술 연산자

ㄴ.증가감소연산자

ㄷ.논리연산자

ㄹ.비트연산자

ㅁ.대입연산자

ㅂ.비교연산자

ㅅ.논리연산자

ㅈ.연산자우선순위

9.데이터의 형변환

ㄱ. (char),(double), 사용자정의자료형의 형변환, object의 형변환.Convert.ToChar()

ㄴ. 오버플로우시.. checked, unchecked로 오버플로우 무시하거나 예외 발생시키기

10. 제어문

가. 반복문

ㄱ. for

ㄴ. while

ㄷ. do~ while

ㄹ.foreach

ㅁ. continue, break를 함께 포함.

나. 분기문

ㄱ.조건 연산자

bool selector;

int a = selector ? 0 : 1; //selector가 참이면 0 거짓이면 1이 대입된다.

ㄴ. if ~ else

ㄷ. if ~ else if~ else if~ 반복시키기

ㄹ. switch

11.클래스, 객체

ㄱ. 클래스 개념,

ㄴ. 객체 개념, 객체 생성 방법

ㄷ. 생성자

ㄹ. 필드, 멤버, 메소드,프로퍼티 등 용어와 정의, 사용법, 예제

ㅁ.public,private,protected,internal

ㅂ. 범위(scope)

12.메소드 호출 및 클래스 사용방법 예제포함

13. 오버로드

 

14. 프로퍼티(속성)과 인덱서

15. 상속개념

ㄱ. 기본개념, object클래스와 상속

ㄴ. is a, has a

ㄷ. public, protected, private 멤버의 상속

ㄹ. sealed, static 등의 수식어와 상속

ㅁ. 상속이 되면서 생성자와 소멸자의 호출

ㅂ. base 클래스의 멤버와 같은 이름을 new를 이용해서 생성. base 를 이용해서 base 클래스의 멤버를 호출

base.add 이런식…

ㅅ. 함수의 오버라이드 virtual과 override

ㅇ. 속성의 오버라이드 virtual과 voerride – 각각 이름 인수 반환값의 형이 같아야 함

ㅈ. override와 new

16. 구조체 struct

17. Call by value Call by Reference, ref, out

18. abstract추상 클래스, 추상 메서드

19. 인터페이스

20. 다형성

21. 박스화

22. delegate와 이벤트

23. 제네릭 함수, 제네릭 클래스

class AAA <T>
{
  public T t;
  public T x()
  {...........}
}

AAA <int> aaa = new AAA<int>();
/////////////////
T를 int로 치환한것과 같은 효과
public int t;
public int x()

class AAA <T,Y>
{
  public T t;
  public Y y;
}
AAA <int, string> aaa = new AAA<int,string>();

AAA<int,string> aaa = new (visual studio를 쓴다면 new까지만 치고 탭 누르면 자동완성해준다)

24. 예외처리 try catch finally

25. MSDN찾는 방법.

ㄱ. Console.WriteLine

ㄴ. Stream

ㄷ. 문자열처리

이벤트핸들러EventHandler

public class CalcEventArgs : EventArgs
//우선 이벤트를 넣을 클래스를 만들기.
//멤버가 없는 클래스인 EventArgs를 상속받아야됨

class Calculator
{
public event EventHandler CalcStock;
//이벤트를 발생시킬 Calculator클래스 안에서
//이벤트 키워드를 이용해서 이벤트 핸들러를 선언
public void Calculator(()
}
----------------
///////////////////////////////////////////////
delegate void CustomEvent();//delegate 선언

class EventClass
{
  public event CustomEvent customevent; //event선언
  public void Start()
  {
    if (customevent != null)
    {
      System.Threading.Thread.Sleep(1000);
      customevent();
    }
  }
}

class CustomSample
{
  static void handler()
  }
    Console.WriteLine("핸들러호출");
  }
  static void Main()
  {
    EventClass e = new EventClass();
    e.customevent += new CustomEvent(handler);
    e.Start();
  }
}
///////////////////////////////////////////////

이런식인듯… 외워야지… 필요할 때 찾아쓰는 용

HashTableSample해쉬테이블 사용 예제Example

해쉬테이블은 문자열 이름으로 소환되는 배열을 만들 수 있다.

public static Hashtable htHoga = new Hashtable();//htHoga라는 HashTable객체를 생성한다.

//ToolCS.CodeArray.Futures, Spreads는 종목코드를 갖고 있는 배열이다.

        const int 호가개수 = 5;
        public void HogaInit()
        {
            for (int i = 0; i < ToolCS.CodeArray.Futures.Length; i++)
            {
                htHoga.Add(ToolCS.CodeArray.Futures[i], NewHoga(ToolCS.CodeArray.Futures[i]));
            }
            for (int i = 0; i < ToolCS.CodeArray.Spreads.Length; i++)
            {
                htHoga.Add(ToolCS.CodeArray.Spreads[i], NewHoga(ToolCS.CodeArray.Spreads[i]));
            }

        }

        FutHoga NewHoga(string code)
        {
            FutHoga aHoga = new FutHoga();
            aHoga.종목코드 = code;
            aHoga.매도호가 = new double[호가개수];
            aHoga.매수호가 = new double[호가개수];
            aHoga.매도잔량 = new int[호가개수];
            aHoga.매수잔량 = new int[호가개수];

            for (int i = 0; i < 호가개수; i++)
            {
                aHoga.매도호가[i] = 0;
                aHoga.매수호가[i] = 0;
                aHoga.매도잔량[i] = 0;
                aHoga.매수잔량[i] = 0;
            }

            return aHoga;
        }

public struct FutHoga
    {
        public string 종목코드;
        public double[] 매도호가;
        public double[] 매수호가;
        public int[] 매도건수;
        public int[] 매수건수;
        public int[] 매도잔량;
        public int[] 매수잔량;
    }

그냥 내가 쓰던거 그대로 갖다 붙여놓은거…

나중에 꺼내쓸때는 htHoga(“101F6”);

이렇게 입력하면… 101F6는 Futures의 배열값을 꺼내준다.

원래 여기저기 다른 클래스랑 네임스페이스에 퍼져있던 코드를 모아놓은거라서…이거 그대로 붙여넣는다고 동작은 하지는 않겠지만… 참고정도는 될듯…

보정을 해야되는데 좀 귀찮은듯…

 

((Structs.StoHoga)Stock.htHoga[Code]).매도호가[i] = 500원

//이런식으로 꺼내쓸 수 잇다.
좀 복잡해보이지만.... 잘 생각해보면 어렵지는 않다.
배열을 문자열로 조회해야 하는 경우에 정말 유용하다.
(Struct.StoHoga) 헤쉬테이블은 오브젝트 형태로 저장되기 때문에 구조체 형식으로 강제로 형변환을 해 줘야한다.
그리고 ()괄호로 한번 더 감싸주면.... 구조체로 변신~
그리고 구조체처럼 쓰면된다.

 

C# 프로젝트간 데이터 교환

인터넷에 검색 해 보면…

포트를 열고 통신을 시킨다던가

파일로 공유한다던가… 다양한 방법이 있는 것 같다.

내 경우에는 실시간으로 이뤄져야 하고 용량이 커서 파일 공유는 문제가 있었다.

그럼 메모리를 통한 공유도 문제가 되고..

문제상황:

갑 프로젝트에서 컨트롤하는 을1, 을2, 을3 프로젝트가 있다.

갑프로젝트에서 을1,2,3프로젝트의 함수를 호출한 후 나온 데이터를 처리한 후 갑 프로젝트로 보내줘야한다. 갑 프로젝트는 데이터를 받으면 바로 처리를 해서 화면에 띄운다.

리턴형태로 보내줄수도 있지만…. 리턴형태로 하나하나 해주다 보니 너무 복잡해진다. 그래서 데이터를 편하게 주고받을 방법을 찾아보려고… 생각한게 새 프로젝트..

요구사항:

데이터를 자유롭게 공유할 수 있어야 함.

빠른 공유가 가능해야함.

데이터가 변경될 때 마다 이벤트를 줄 수 있어야함

public static class ClsData//공유용 클래스...
{
  public static DataTable dtbl공유용;
  public static int a;
}

클래스라이브러리 프로젝트를 대강 이런식으로 만들어서 양쪽에서 사용했다. 스태틱으로 선언하면 양쪽 프로젝트에서 접근해도 같은 값을 유지한다. 새로운 객체가 생성이 안되니까..

이벤트를 전달할 수 없다는게 아쉽긴 했지만….

이벤트를 전달하지 못한다는 점에서 완벽한 해결책은 아니다.

포트통신으로 하면 왠지 어려울것같고.. 불편할 것 같고….

……..뭔가 꼬이긴 했는데 … 다시 만들기도 그렇고.. 다시만들어도 똑같은 꼴이 날 것 같고… 어떻게든 고쳐서 쓰긴 해야겠는데…

일단은 이정도로 만족해야할 듯 하다.

이벤트를 전달할 방법만 찾으면 될듯 싶다.

함수화 변수의 유효범위

{

}

중괄호로 포장된 사이에 있는것은 그 사이에서만 Local변수로 성립한다.

int i=3;
for(int i=0;i<5;i++)
{

}
Console.WriteLine(i);

여기서 콘솔창에 출력되는 i는 3이다. 0이나 4가 아니고…

이런것이 변수의 범위…

함수의 범위도 그냥 쉽게 생각하면된다

클래스 안에서는 자유롭게 사용가능하고… C#은 그냥 상식적이고 논리적으로 만들었다.

생각하는대로 하면 그게다 그거임…

 

객체지향 프로그래밍OOP,Objective Oriented Programming

말 그대로 객체지향 프로그래밍…

C++,C#,JAVA등을 이용하여 객체지향적인 프로그래밍을 하는것이다

절차지향적인 C나 포트란 등과 다른점은….

처음에서 끝으로 이어지는 순서를 갖고 있는것이 아닌

객체에서 객체로 연결되는… 왔다갔다 정신없는 프로그래밍이 가능하다는 것이다

객체지향이기에 멀티스레딩이 가능해진다? 편리해지는건가…

도스와 같은 한번에 한가지 작업만 할 수 있는 시스템에서는 절차지향으로 충분했는데

윈도우처럼 멀티태스킹이 가능해지고 하면서…. 객체지향이 더 중요해졌다는 것 같다.

전공자가 아니면.. 프로그래밍 하는데는 별 상관없는 지식인 것 같다.