블로그 이미지
Magic_kit
study 관련자료를 한곳으로 자기 개발 목적으로 재태크 재무 관리 목적으로 일상생활의 팁을 공유 하기 위하여 블로그를 개설 하였습니다.

calendar

1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28

Category

Recent Post

Recent Comment

Archive

'.Net Project/.Net C#'에 해당되는 글 69

  1. 2009.08.18 93장 제네릭클래스(Generic Class)
  2. 2009.08.17 92장 제네릭클래스(List Generic Class)
  3. 2009.08.17 91장 예외처리(Exception)
  4. 2009.08.17 90장 연산자오버로딩
2009. 8. 18. 09:33 .Net Project/.Net C#
반응형
 Generic Class란 ??
제네릭 클래스는 특정 데이터 형식에 고유하지 않은 작업을 캡슐화합니다. 제네릭 클래스는 연결된 목록(linked list), 해시 테이블, 스택, 큐, 트리 등 컬렉션에서 항목을 추가하고 제거하는 등의 작업이 저장되는 데이터의 형식과 관계없이 동일한 방식으로 수행되는 컬렉션에 가장 일반적으로 사용됩니다.

제네릭 클래스는 비가변적입니다. 즉, 입력 매개 변수에서 List<BaseClass>를 지정하면 List<DerivedClass>를 제공하려고 할 때 컴파일 타임 오류가 발생하게 됩니다
형식 매개 변수와 제약 조건에 대한 규칙은 제네릭 클래스 동작에서 특히 상속과 멤버
액세스 가능성에 대해 몇 가지 영향을 줍니다.

계속하려면 몇 가지 용어를 이해하고 있어야 합니다.
Node<T>, 제네릭 클래스의 경우 클라이언트 코드에서는 형식 인수를 지정하여 폐쇄형
생성 형식(Node<int>)을 만드는 방법으로 클래스를 참조하거나, 제네릭 기본 클래스를 지정하는 경우와 같이 형식 매개 변수를 지정하지 않고 개방형 생성 형식(Node<T>)을 만드는 방법으로 클래스를 참조할 수 있습니다.

제네릭 클래스는 구체적인 클래스, 폐쇄형 구성 클래스 또는 개방형 구성

기본 클래스에서 상속할 수 있습니다.

 Program.Cs

using System;
//using System.Collections.Generic;

public class 제네릭클래스
{
    public static void Main()
    {
        //기본클래스메서드 호출
        //Hello h = new Hello();
        //h.SayInt(1234); h.SayStr("안녕"); h.SayObj(DateTime.Now);
        Hello<int> hi = new Hello<int>(); hi.Say(1234);
       
        //hi.Say 정수형으로 받고 할경우 
        Hello<string> hs = new Hello<string>(); hs.Say("안녕"); 
       
        //매개변수가 있는 생성자 만들어서 사용하는 경우
        Hello<string> say = new Hello<string>("반갑습니다.");
        say.Say(); //생성자 호출
        say.SayType(); //생성자 호출
    }
}

Hello Class Generic 타입 생성 

//제닉클래스를 사용하고 할 경우(원하는 모든값을 전달 받아 사용 가능)
public class Hello<T>
{
    private T msg;

    //public Hello() { msg = default(T); }
    // 매개없는 생성자와 같은 방식으로 전달하여 사용 가능 

   
    public Hello() { } //매개변수 없는 생성자 
   
    //매개변수가 있는 생성자 만들어서 사용하는 경우
    public Hello(T msg)  {this.msg = msg;}
    public void Say() { Console.WriteLine("{0}", this.msg); }

    public void Say(T msg) { Console.WriteLine("{0}",msg); }

    public void SayType() {
        T temp;
        temp = default (T) ; //drfault 기본값을 초기화 해주기 위해 사용
        Console.WriteLine("{0}", temp);
    }
    //가장 일반적으로 사용하고 있는 예제이다
    //public void SayInt(int msg) {Console.WriteLine("{0}", msg); }
    //public void SayStr(string msg) {Console.WriteLine("{0}",msg); }
    //public void SayObj(object msg) {Console.WriteLine("{0}",msg); }

}

Generic Class관련하여 더 자세한 사항은 참고 바람)

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


반응형
posted by Magic_kit
2009. 8. 17. 18:44 .Net Project/.Net C#
반응형

 

List Generic Class 란 ?
인덱스로 엑세스 할수 있는 강력한 형식의 개체 목록을 나타냅니다.
목록의 검색, 정렬 및 조작에 사용할 수 있는 메서드를 제공 하고 있습니다.
ArrayList 클래스의 제네릭 형태에 따라, 클래스는 크기가 동적으로 증가하는 배열을
사용하여 IList 제네릭 인터페이스를 구현하고 있습니다.

 Program.cs

using System;
using System.Collections.Generic;

public class 리스트제네릭{
    public static void Main()
    {
        //정수형
        List<int> su = new List<int>();
        su.Add(10) ; su.Add(20) ; su.Add(30) ;
        for (int i = 0; i < su.Count; i++)
            {
                Console.WriteLine("{0}",su[i]);
            }
        //문자형
        List<string> str = new List<string>();
        str.Add("안녕"); str.Add("방가"); str.Add("또봐");
        for (int i = 0; i < str.Count; i++)
           {
            Console.WriteLine("{0}",str[i]);            
           }
        //개체형 (테이블형태) : 문자열, 정수
        List<ProductInfo> lstProduct = new List<ProductInfo>();

        //속성사용방법과 생성자 사용방법의 이해
        //첫번째

        ProductInfo pi1 = new ProductInfo();  //속성사용
        pi1.MedelName = "TV"; pi1.Quantity = 10;
        lstProduct.Add(pi1);

        //생성자 사용한 것을 의미(추천)
        //두번째

        ProductInfo pi2 = new ProductInfo(); //생성자
        lstProduct.Add(new ProductInfo("RADIO", 5));

        //세번째 사용 방법(컬렉션/개체 초기화하자)
        ProductInfo pi3 = new ProductInfo();
        pi3.MedelName = "TV"; pi3.Quantity = 3;
        lstProduct.Add(new ProductInfo()
                            { MedelName = "DVD", Quantity = 3 });

        //출력 : 윈폼/웹폼에서는 DataSouce 개념 적용
        for (int i = 0; i < lstProduct.Count; i++)
        {
            Console.WriteLine("{0},{1}", lstProduct[i].MedelName,lstProduct
                                     [i].Quantity);            
        }
    }
}

 

 ProductInfo.cs

using System;

public class ProductInfo
{
    //상품명
    public string MedelName { get; set; }

    //판매량
    public int Quantity { get; set; }

    //생성자
    public ProductInfo(string modelName, int quantity)
    {
        this.MedelName = modelName;
        this.Quantity = quantity;

    }
    //매개변수 없는 생성자
    public ProductInfo()
    {
        //Empty
    }   
}

1. 속성사용하는 방법)

  ProductInfo pi1 = new ProductInfo();  //속성사용
        pi1.MedelName = "TV"; pi1.Quantity = 10;
        lstProduct.Add(pi1);

  //상품명
    public string MedelName { get; set; }
   //판매량
    public int Quantity { get; set; }


2. 생성자사용하는 방법)

   ProductInfo pi2 = new ProductInfo(); //생성자
        lstProduct.Add(new ProductInfo
        ("RADIO", 5));

3. 컬렉션/개체 초기화자

  ProductInfo pi3 = new ProductInfo();
        pi3.MedelName = "TV"; pi3.Quantity = 3;
        lstProduct.Add(new ProductInfo()   
        { MedelName = "DVD", Quantity = 3 });


더 많은 사항이 궁금하시면..
아래의 링크를 들어가서 제네릭 클래스에 대해 알아보시면 됩니다...
http://msdn.microsoft.com/ko-kr/library/6sh2ey19(VS.85).aspx
 


반응형

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

94장 형식매개변수에 대한 제약조건  (0) 2009.08.18
93장 제네릭클래스(Generic Class)  (0) 2009.08.18
91장 예외처리(Exception)  (0) 2009.08.17
90장 연산자오버로딩  (0) 2009.08.17
89장 변환연산자  (0) 2009.08.17
posted by Magic_kit
2009. 8. 17. 17:15 .Net Project/.Net C#
반응형

 예외처리(Exception)
프로그램에서는 실행 중 발생하는 오류를 일관되게 처리할 수 있어야 합니다. 공용 언어 런타임에서는 일관된 방법으로 프로그램에 오류를 알리는 모델을 제공함으로써 내결함성이 있는 소프트웨어의 디자인을 지원합니다.
모든 .NET Framework 작업에서는 예외를 throw하여 오류를 나타냅니다.

1. 예외를 생성하는 언어나 예외를 처리하는 언어에 관계없이 예외를 처리합니다.
2. 예외 처리에 특별한 언어 구문이 필요하지는 않지만 각 언어에서 고유한 구문을
   정의할 수 있도록 허용합니다.
3. 프로세스나 컴퓨터에 의해 그 범위를 제한 받지 않고 예외가 throw되도록 허용합니다.


 Try Catch 관련하여 예외처리
try-catch 문은 try 블록과 각각 다른 예외의 처리기를 지정하는 하나 이상의
catch 절로 구성 되어 있습니다.

try 블록에는 예외를 발생시킬 수 있는 보호된 코드가 포함됩니다. 이 블록은 예외가 throw되거나 성공적으로 완료될 때까지 실행됩니다.

1. 예를 들어, 다음 예제와 같이 null 개체를 캐스팅하려고 하면   
   ullReferenceException 예외가 발생합니다.
2. catch 절은 인수 없이 사용할 수 있습니다. 이 경우 catch 절은 모든 예외 형식을
   catch하며 일반 catch 절로 간주됩니다. 또한 이 절은 System.Exception에서
   파생된 개체 인수를 받을 수 있습니다. 이 경우 catch 절은 특정 예외를 처리합니다.
3. try-catch 문에서 여러 개의 특정 catch 절을 사용할 수 있습니다. catch 절은
    순서대로 검사되므로 이런 경우에는 catch 절의 순서가 중요합니다.
    보다 구체적인 예외를 먼저 catch하십시오.
4.  throw 문을 catch 블록에 사용하여 catch 문에서 catch한 예외를 다시
    throw할 수 있습니다.
5. 현재 매개 변수가 없는 catch 절로 처리된 예외를 다시 throw하려면 인수
   없이 throw 문을 사용
6. try 블록 내에서는 이 블록에서 선언된 변수만 초기화하십시오.
   그렇지 않으면 블록 실행이 완료되기 전에 예외가 발생할 수 있습니다.  


 Program.cs

// 예외(Exception) :오류(Error)
// 컴파일(문법) 오류 : 잘못 타이핑, 잘못된 문법이면 VS가 바로 잡아준다
// 런타임(실행) 오류 : 실행시 발생
// 논리(잘못된 분석) 오류 : 잘못된 분석/설계/구현(오탈자) 등등
// 많은 프로그램 작성 경험

using System;

public class 예외처리{
    public static void Main()
    {
        //int c = 5 / 0;  상수를 0으로 나눌수 없기 때문에 문법 오류
        int a = 5;
        int b = 0;
        //int c = a / b; //런타임 에러 발생
        //int c = a + b; //논리상 나누기가 필요한데, 더하기(+)를 해버렸다.
        //Console.WriteLine("{0}", c);

        ExceptionHandling(); //호출
            
    }

    private static void ExceptionHandling()
    {
        int a = 5;
        int b = 0;

        try
        {
            //1. 예외 발생할만한 구문 넣어 놓는
            // int c = a / b; //예외가 발생할만한 구문은 try절에...
            throw (new Exception("내가만든에러"));  // 무조건 예외를 던지다(발생)
            //throw (new Exception("내가만든에러"));  // 무조건 예외를 던지다(발생)
            //DivideByZeroException dbze = new DivideByZeroException
                                                       ("듀글래?");
            //throw new DivideByZeroException("듀글래?");
            //throw dbze;
        }
        catch (Exception ex)
        {
            //2. 예외가 발생했을 때에만 실행됨
            Console.WriteLine("예외발생 : {0}", ex.Message); //메시지 출력           
            throw;
        }
        finally
        {
            //3. 예외가 발생하던 안하던 실행
            Console.WriteLine("프로그램을 정상 종료합니다.");
        }
    }
}

예외처리 과련 참고)

 http://msdn.microsoft.com/ko-kr/library/5b2yeyab(VS.80).aspx

Try-Catch 관련 참고)
 http://msdn.microsoft.com/ko-kr/library/0yd65esw(VS.80).aspx

반응형

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

93장 제네릭클래스(Generic Class)  (0) 2009.08.18
92장 제네릭클래스(List Generic Class)  (0) 2009.08.17
90장 연산자오버로딩  (0) 2009.08.17
89장 변환연산자  (0) 2009.08.17
88장 반복기(Iterator)  (0) 2009.08.17
posted by Magic_kit
2009. 8. 17. 16:31 .Net Project/.Net C#
반응형

연산자오버로딩이란? 
C#에서는 사용자 정의 형식에서 operator 키워드로 정적 멤버 함수를 정의하여 연산자를 오버로드할 수 있습니다.

 연산자  오버로드 가능성  +, -, !, ~, ++, --, true, false : 오버로드 가능   
 
+, -, *, /, %, &, |, ^, <<, >> : 이 이항 연산자는 오버로드할 수 있습니다.
 
==, !=, <, >, <=, >= :  비교 연산자는 오버로드할 수 있습니다.
 
&&, || :  조건 논리 연산자는 오버로드할 수 없지만, 오버로드 가능한 & 및 |를 사용
 
[]  :  배열 인덱싱 연산자는 오버로드할 수 없지만 인덱서를 정의할 수 있습니다.
 
() :  캐스트 연산자는 오버로드할 수 없지만 새로운 변환 연산자를 정의
 
+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>= :  할당 연산자는 오버로드할 수 없다.

=, ., ?:, ->, new, is, sizeof, typeof :  이 연산자는 오버로드할 수 없습니다.

 사용자 지정 클래스에 대한 연산자를 오버로드하려면 올바른 시그니처를 사용하여
 클래스 의 메서드를 만들어야 합니다.
 
 이 메서드의 이름은 "operator X"여야 합니다.
 여기서 X는 오버로드하려는 연산자의 이름이나 기호입니다. 
 단항 연산자에는 매개 변수가 하나이고, 이항 연산자에는 매개 변수가 두 개입니다.
 각각의 경우에 매개 변수 중 하나는 연산자를 선언하는 클래스나 구조체와
 동일한 형식으로 사용.

 Program.cs

using System;
public class 연산자오버로드
{
    public static void Main()
    {
        //int 키워드를 Integer로 모방
        Integer i = 10;
        Integer j = 20;
        Integer k = 0;
       
        //i.Value++; //증간연산자 적용
        //i++; //단항 연산자 오버로드 구현 되어있어야만 가능

        //k.Value = i.Value + j.Value;
        //k = i + j; //이항연산자 활용
       
        //Integer i = new Integer (10);
        //Integer j = new Integer (20);
        //nteger k = new Integer (0); //Tostring() 메서드 오버라이드

        Console.WriteLine(Integer.MaxValue);
        Console.WriteLine(Integer.MinValue);        
        Console.WriteLine(k);
        //Console.WriteLine(k.Value);
    } 
   
}
public partial class Integer
{
    //상수형 필드 선언 : 상수는 반드시 선언 동시 초기화
    public const int MaxValue = int.MaxValue;
    //선언과 동시초기화 또는 생성자 초기화
    public static readonly int MinValue = int.MinValue; //읽기 전용 필드로 선언

    //정적생성자를 통해서 읽기전용필드 초기화 가능
    static Integer() { MinValue = int.MinValue; }

}

 Interger.cs

using System;

public partial class Integer
{
    private int value;
    public Integer(int value){this.value = value;}
    public int Value { get { return value; } set { this.value = value; } }

    //변환연산자
    public static implicit operator Integer(int value)
    {
        return new Integer(value);
    }
   
    //ToString() 오버라이드
    public override string ToString()
    {
        return value.ToString(); //기본 값을 외부에 개체명으로 공개
    }

    //단항 연산자 오버로드
    public static Integer operator ++(Integer data)
    {
        return ++data.value;
    }

    //이항 연산자 오버로드
    public static Integer operator +(Integer a, Integer b)
    {
        return (a.value + b.value);
    }

}

반응형

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

92장 제네릭클래스(List Generic Class)  (0) 2009.08.17
91장 예외처리(Exception)  (0) 2009.08.17
89장 변환연산자  (0) 2009.08.17
88장 반복기(Iterator)  (0) 2009.08.17
87장 암시적으로 형식변환  (0) 2009.08.17
posted by Magic_kit