C \ # 27, 가상 멤버 virtual + this + base + new

5075 단어 C#
가상 멤버
키워드: 부모 클래스 의 구성원 을 다시 쓰 고 virtual 로 수식 합 니 다.하위 클래스 에 대응 하 는 override 수식.
주의:   
1. 필드 는 가상 일 수 없고 방법, 속성, 이벤트 와 색인 기 만 가상 일 수 있 습 니 다.   
2. 하위 클래스 에서 부모 클래스 를 다시 쓰 는 가상 방법 에서 base "." 부모 클래스 의 가상 방법 을 사용 하면 이 방법 을 계속 쓸 수 있 습 니 다.
3. 하위 클래스 와 최초 로 가상 구성원 을 성명 한 클래스 사이 에 몇 개의 클래스 가 성명 되 었 든 가상 구성원 은 영원히 가상 구성원 이 될 것 이다.
4. 만약 에 클래스 A 가 가상 구성원 을 성명 하면 클래스 B 는 클래스 A 에서 파생 되 고 클래스 C 는 클래스 B 에서 파생 되면 클래스 C 는 해당 가상 구성원 을 계승 하 며 재 작성 을 선택 할 수 있 습 니 다. 클래스 B 가 해당 구성원 에 게 재 작성 을 했 든 안 했 든 간 에.
5. 파생 류 는 sealed 로 재 작성 하여 가상 계승 을 중단 할 수 있 습 니 다.
코드 예제:
    class Father
    {
        public virtual void Function()
        {
            Console.WriteLine("Father");
        }
    }
    class SonA:Father
    {
        public override void Function()
        {
            Console.WriteLine("SonA");
        }
    }
    class SonB:Father
    {
        public override void Function()
        {
            Console.WriteLine("SonB");
        }
    }
    class Gson:SonA
    {
        public override void Function()
        {
            Console.WriteLine("Gson");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Father father = new Father();
            SonA sonA = new SonA();
            SonB sonB = new SonB();
            Gson gson = new Gson();

            father.Function();
            sonA.Function();
            sonB.Function();
            gson.Function();

            Console.ReadKey();
        }
    }

--->
Father
SonA
SonB
Gson

this
클래스 의 현재 인 스 턴 스 를 참조 합 니 다.
코드 예제:
    class Class1
    {
        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        private int _age;
        public int Age
        {
            get { return _age; }
            set { _age = value; }
        }

       public Class1(string _name,int _age)
        {
            this._name = _name;
            this._age = _age;
        }
    }
    class Program
    {        
        static void Main(string[] args)
        {
            Class1 class1 = new Class1("jpf",28);
            Console.WriteLine(class1.Name);
            Console.WriteLine(class1.Age);

            Console.ReadKey();
        }
    }

--->
jpf
28

base
기본 클래스 를 대표 하고 base 를 사용 하면 기본 클래스 의 구조 함수, 속성 과 방법 등 을 호출 할 수 있 습 니 다.
하위 클래스 에 부모 클래스 를 호출 하 는 구조 함 수 를 표시 하지 않 으 면 부모 클래스 의 무 참 구조 함 수 를 기본적으로 호출 합 니 다.
코드 예제:
    class Class1
    {
        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        private int _age;
        public int Age
        {
            get { return _age; }
            set { _age = value; }
        }

        public Class1(string _name, int _age)
        {
            this._name = _name;
            this._age = _age;
        }

        public virtual void Function()
        {
            Console.WriteLine(1);
        }
    }
    class Class2:Class1
    {
        public override void Function()
        {
            base.Function();
            Console.WriteLine(2);
        }

        public Class2(string _name, int _age) : base(_name, _age)
        {

        }
    }
    class Program
    {        
        static void Main(string[] args)
        {
            Class1 class1 = new Class1("jpfa",24);
            Console.WriteLine("  :{0},  :{1}",class1.Name,class1.Age);
            class1.Function();

            Class2 class2 = new Class2("jpfb", 25);
            Console.WriteLine("  :{0},  :{1}", class2.Name, class2.Age);
            class2.Function();

            Console.ReadKey();
        }
    }

--->
  :jpfa,  :24
1
  :jpfb,  :25
1
2

정적 구성원 방법 에 서 는 base 와 this 키 워드 를 사용 할 수 없습니다.
new
하위 클래스 에 서 는 부모 클래스 에서 물 려 받 은 어떤 방법 을 다시 쓰 지만, 부모 클래스 의 방법 을 바 꾸 는 것 이 아니 라 숨 기 고 키워드 new 를 사용 해 야 합 니 다.
숨겨 진 방법 호출: 하위 클래스 성명 의 대상 을 사용 하면 하위 클래스 의 방법 을 호출 합 니 다.부모 클래스 성명 의 대상 을 사용 하면 부모 클래스 의 방법 을 사용 합 니 다.
코드 예제:
    class Class1
    {
        public void Function()
        {
            Console.WriteLine(1);
        }
    }
    class Class2:Class1
    {
        public new void Function()
        {
            Console.WriteLine(2);
        }
    }
    class Program
    {        
        static void Main(string[] args)
        {
            Class1 class1 = new Class1();
            class1.Function();

            Class2 class2 = new Class2();
            class2.Function();

            Class1 class3 = new Class2();
            class3.Function();


            Console.ReadKey();
        }
    }

--->
1
2
1

좋은 웹페이지 즐겨찾기