2014년 2월 20일 목요일

[C#강좌]닷넷C#의 struct 생성자,C#/WPF/닷넷WPF/ASP.NET/ADO닷넷/닷넷교육/닷넷강좌학원/닷넷공부/닷넷책/닷넷객체지향교육

[C#강좌]닷넷C#의 struct 생성자,C#/WPF/닷넷WPF/ASP.NET/ADO닷넷/닷넷교육/닷넷강좌학원/닷넷공부/닷넷책/닷넷객체지향교육

struct를 위한 생성자의 선언인 경우 기본 생성자를 만들어 줄 수 없다클래스인 경우 생성자를 명시적으로 만들어 놓으면 컴파일러가 다시 만들지는 않지만 struct인 경우 항상 기본 생성자를 만드는 구조이다. 그러므로 사용자가 기본 생성자를 만들게 되면 중복 선언이 되는 것이다.

아래와 같은 경우가 오류다.

물론 struct에서 사용자가 기본 생성자 이외의 생성자를 만드는 것은 가능하다.

           struct Point {
                     int x;
                     int y;
                     Point() { }
           }

struct역시 new  연산자를 이용하여 생성 할 수 있다. 그렇다면 클래스와 struct의 차이는 무얼까? 클래스는 new 했을때 Heap에 저장 되지만 struct Stack에 저장 된다. 물론 Stack에 있는 것이 속도면에서는 훨씬 빠르다.

struct ValueType 이므로 new을 사용하지 않더라도 선언이 가능하다.

           Point p;

struct의 경우 사용자가 만든 생성자가 있을 경우 생성자에서 모든 필드의 값을 초기화 시켜야 한다. 그렇지 않으면 컴파일시 오류가 발생 한다. 물론 C#에서는 struct를 다른 클래스가 상속받아서 사용하지 않으므로 protected로 선언할 수 없다.

           아래의 예제를 참고 하자.

           using System;

           struct Point {
                     public int x;
                     public int y;
                     public Point(int x, int y) {
                                this.x = x;
                                this.y = y;
                     }
           }

           class StructTest {
                     static void Main() {
                                Point p = new Point(5,5);
                                Console.WriteLine(p.x);
                     }
           }



댓글 없음:

댓글 쓰기