ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C# 2교시...C++차이점위주..
    @ 16. 1 ~ 17. 1/C# 2014. 7. 26. 21:23

    c++ 에서는 객체 생성시..

    클래스 a;

    이런식인데..

    C#에서는

    클래스 a = new 클래스();

    이런식이다 a가 포인터도 아닌데..

    그냥 클래스 a를 할 경우..

    a는 NULL을 가진다..

    왜냐면 c#에서는 모든 클래스는 참조 형식이기 때문에..?

    (포인터가 없다는 이야기도..)

    그리고 클래스내 맴버나 메서드 선언시..

    한정자..를 계속 붙여줘야..

     

    public 반환값 메서드 이름 (매개변수)

     

    ...더 큰 충격적인 사실..

    소멸자를 구현하지 말라고 한다..왜냐면 가비지 컬렉터가 우리보다 훨씬 똑똑하게 객체의 소멸을 처리한단다..응?

     

    A a=new A();

    A.data=10;

     

    A b=a;

    b.data=20;

    ab의 값은? a는 20 b도 20...왜냐고?

    C#에서 new 로 항상 클래스의 객체를 생성하니까 이것은 참조형식이기 때문이다.

    그럼 c#에서의 깊은 복사는?

    객체를 힙에 새로 할당해서 그곳에 자신의 멤버를 일일이 복사해 넣는다??

    public 객체 deepcopy()
    {

    객체 newCopy=new 객체();

    newCopy.data=this.data;

    return newCopy; //이게 중요함..

    }

     


     

    this() 생성자??

    이건뭔가..this랑 같긴하다 근데..이것은 자기 자신의 생성자를 가리킨다.

    this()는 생성자에서만 사용될 수 있고 또한 코드 블록의 안쪽이 아닌 앞쪽에서 (멤버 이니셜라이저)에서 사용이 가능하다..

    생성자()

    {

    a=1;

    }

    생성자(int) : this()  //(이건 생성자()를 호출한다.)

    이런식으로...

     


     

    C++과 똑같이 접근 한정자로 수식하지 않은 클래스의 멤버는 모두 private!

    이젠 상속부분..!

    부모클래스의 생성자가 매개변수를 입력받고록 선언되어 있다면 자식클래스의 인스턴스를 생성할 때 호출되는 부모클래스의 생성자에게 어떻게

    매개변수를 전달해 줄 수 있을까? C++에서는 멤버이니셜라이저에 : 부모클래스(매개변수) 했던것으로 기억나는데..

    c#에서는 base라는 키워드가 있다.

    this가 자기자신을 가리키면 base는 부모클래스를 가리킨다. this를 통해 자기 자신의 멤버에 접근했으니까 base를 통해서도 부모클래스의 멤버에 접근 할 수 있다.

    헐..자세히보니 위에 C++ 방법하고 같은데..그냥 base(매개변수) 이렇게 하는게 전부임..

    * 상속봉인! sealed class 이름

    !!

    C++ 의 형변환은 무엇이 있었는가?

    static_cast 와 reinterpret_pret와... dynamic_cast 그리고 const관련된것 이렇게 있었다

    C#에서는 형변환을 위해 연산자를 2개나 지원해준다.

    is as가 있다.

    is는 객체가 해당 형식에 해당하는지를 검사하여 그 결과를 bool값으로 반환

    as는 이것은 변환에 실패하는 경우 객체 참조를 null로 만든다.

    사용법은

    비교원본객체 is 배교대상객체

    as도 같다.(근데 참조 형식에서만 가능..값은 기본 형식변환을 사용)

    비교후......................

     

     


     

    오버라이딩에서..

    C++에서는

    단순 virtual 함수 였지만..

    C#에서는 오버라이딩할 메소드는 virtual 이고

    재정의하는곳에서는

    override로 해야한다...

    또 메소드 숨기기?란게 있는데..그냥 오버라딩을 흉내내게 부모클래스의 메소드를 숨기는것..

    사용법은

    public new 부모클래스의 메소드를 오버라이딩..()

    virtual 오버라이딩도 막을 수 있다 무엇으로? 상속 접근금지 처럼..public sealed override 함수명()

    이렇게..

    '@ 16. 1 ~ 17. 1 > C#' 카테고리의 다른 글

    getter setter  (0) 2016.11.18
    C# 시작2  (0) 2016.11.16
    C# 시작  (0) 2016.11.16
    C# 3교시...  (0) 2014.07.27
    C# 시작하다...  (0) 2014.07.25
Designed by Tistory.