C\#의 계승 깊이 이해

5710 단어 C#이어받다
C\#의 계승
계승,패 키 징 과 다 태 는 대상 을 대상 으로 프로 그래 밍 하 는 중요 한 특성 이다.
그 구성원 이 계승 되 는 종 류 는 기 류 라 고도 부 르 고 그 구성원 을 계승 하 는 종 류 는 파생 류 라 고도 부 르 며 자 류 라 고도 부른다.
파생 류 은 식 은 기본 클래스 의 구조 함수 와 석조 함 수 를 제외 한 모든 구성원 을 얻 을 수 있 습 니 다.파생 류 는 하나의 직접 기본 클래스 만 있 을 수 있 기 때문에 C\#는 다 중 계승 을 지원 하지 않 지만 하나의 기본 클래스 는 여러 개의 직접 파생 클래스 가 있 을 수 있 습 니 다.
계승 은 전달 할 수 있다.
즉, ClassB파생ClassC,ClassA 파생ClassB이 발생 하면 ClassC ClassB ClassA에서 밝 힌 구성원 을 계승 할 것 이다.

 class A
    {
        public void Sum(int i,int j)
        {
            int sum = i + j;
            Console.WriteLine("I am A ,my sum ={0}",sum);
        }
    }
    class B : A
    {
        public void Minus(int i,int j)
        {
            int minus = i - j;
            Console.WriteLine("I am B ,my minus ={0}", minus);
            this.Sum(3, 4);
        }
    }
    class InheritanceTest1
    {
        static void Main(string[] args)
        {
            B b = new B();
            b.Minus(3, 4);
            Console.Read();
        }
    }
결과:
I am B ,my minus=-1
I am A ,my sum = 7
기 류 Sum()방법 이 사유 일 때 파생 류 가 이 방법 을 계승 할 수 있 을 까?
본인 의 테스트 를 통 해 B 류 에서 이 방법 을 찾 지 못 했다 면 그것 은 계승 되 지 않 았 을 까?사실은 그렇지 않 습 니 다.개인 구성원 은 이미 계승 되 었 지만 그들 은 방문 할 수 없습니다.개인 구성원 은 그들의 유형 이나 구조 체 에서 만 방문 할 수 있 기 때문에 계승 되 지 않 은 것 처럼 보 입 니 다.
만약 우리 가 접근 의 기본 을 낮 추고 싶다 면,우 리 는 기본 클래스 Sum()방법 을protected로 정의 할 수 있다.
어떤 종류 가 다른 종류 에 의 해 계승 되 는 것 을 막 을 수 있 습 니까?
정 답 은 가능 합 니 다.C\#는 sealed 수식 자 를 제공 합 니 다.이 수식 자 는 다른 종류의 계승 을 막 을 수 있 습 니 다.

   sealed class A
    {
        int test;
        public void Sum(int i,int j)
        {
            int sum = i + j;
            Console.WriteLine("I am A ,my sum ={0}",sum);
        }
    }
    class B : A 
    {
        public void Minus(int i,int j)
        {
            int minus = i - j;
            Console.WriteLine("I am B ,my minus ={0}", minus);
            this.Sum(3, 4);       //          
        }
     }
앞에서 말 했 듯 이 파생 류 은 식 은 기본 클래스 의 구조 함수 와 석조 함 수 를 제외 한 모든 구성원 을 얻 었 다.
그렇다면 우 리 는 어떻게 기류 의 구조 함수 와 자신의 구조 함 수 를 얻어 야 합 니까?
우 리 는 기본 클래스 의 초기 화 작업 은 기본 클래스 의 구조 함수 에 의 해 이 루어 지고 파생 클래스 의 초기 화 작업 은 파생 클래스 의 구조 함수 에 의 해 이 루어 진 다 는 것 을 알 고 있 으 나 이렇게 해서 파생 류 구조 함수 의 집행 순서 문제 가 발생 했다.
기본 클래스 에 구조 함수 가 없고 파생 클래스 에 구조 함수 가 없 을 때 파생 클래스 의 새로운 구성원 의 초기 화 작업 은 다른 공유 함수 로 이 루어 집 니 다.

 public  class A
    {
        int test=0;
        public void sum()
        {
            test++;
            Console.WriteLine("I am test ={0}" ,test);
        }
    }
    class B : A 
    {
        int i;
        public void PrintInt()
        {
            i = 3;
            Console.WriteLine("I am i ={0}", i);
        }
    }
    class InheritanceTest1 
    {
        static void Main(string[] args)
        {
            B b = new B();
            b.PrintInt();
            Console.Read();
        }
    }
결과:
I am i=3
파생 류 만 구조 함 수 를 정의 할 때 파생 류 대상 을 구성 하면 된다.대상 의 기본 클래스 부분 은 기본 구조 함 수 를 사용 하여 자동 으로 생 성 됩 니 다.기본 류 와 파생 류
구조 함수 가 있 을 때 실행 순 서 는 어떻게 됩 니까?
만약 에 기본 클래스 에 매개 변수 가 없 는 구조 함수 라면 그 는 파생 류 에 의 해 암시 적 으로 실 행 될 수 있다.즉,파생 류 는 구조 함 수 를 포함 할 필요 가 없다.만약 에 기본 클래스 에 매개 변수 가 없 는 구조 함수 라면 파생 류 에서 매개 변수 가 있 는 구조 함수 Publicclasa 를 사용자 정의 할 수 있다.

public  class A
    {
        int test=0;
        public A()
        {
            test = 5;
            Console.WriteLine("I am A          ,test={0}", test);
        }
    }
    class B : A 
    {
    }
    class InheritanceTest1 
    {
        static void Main(string[] args)
        {
            B b = new B();
            Console.Read();
        }
    }
결과:
I am A 공유 기본 구조 함수,test=5
이 를 통 해 기본 적 인 구조 함수 가 실행 되 고 파생 류 에서 호출 되 는 것 을 볼 수 있다.
만약 에 기본 클래스 가 매개 변 수 를 가 진 구조 함 수 를 정의 한다 면 이 구조 함 수 는 반드시 실행 되 어야 하고 파생 클래스 에서 이 구조 함 수 를 실현 해 야 합 니 다.이때 우 리 는 base 키 워드 를 사용 할 수 있 습 니 다.

   class A
    {
        int test=0;
        public A(int i)
        {
            test = i;
            Console.WriteLine("I am A          ,test={0}", test);
        }
    }
    class B : A 
    {
        public B(int j):base(j)
        {
            Console.WriteLine("I am B         ,j={0}",j);
        }
    }
    class InheritanceTest1 
    {
        static void Main(string[] args)
        {
            B b = new B(1);
            Console.Read();
        }
    }
결과:
I am A 공유 삼 구조 함수,test=1
I am B 공유 구조 함수,j=1
이 를 통 해 알 수 있 듯 이 파생 류 암시 적 실행 기본 클래스 에 매개 변 수 를 가 진 구조 함 수 는 프로그램 에서 기본 클래스 에서 매개 변 수 를 가 진 구조 함 수 를 정의 하고 파생 류 에서 계승 되 며 base 키 워드 를 사용 하여 기본 클래스 의 구조 함 수 를 호출 하여 파 라 메 터 를 전송 합 니 다.
우 리 는 코드 에서 파생 류 를 만 드 는 대상 을 볼 수 있 습 니 다.프로그램 은 먼저 기본 적 인 구조 함수 의 내용 을 실행 한 다음 에 파생 류 의 내용 입 니 다.
만약 에 파생 류 의 기류 도 파생 류 라면 모든 파생 류 는 직접적인 기류 의 구조 만 책임 지고 간접 기류 의 구 조 를 책임 지지 않 으 며 구조 함 수 를 집행 하 는 순 서 는 맨 위의 기류 에서 시작 하여 마지막 파생 류 가 끝 날 때 까지 이다.
총결산
이 글 은 여기까지 입 니 다.당신 을 도 울 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 기 를 바 랍 니 다!

좋은 웹페이지 즐겨찾기