본문 바로가기

프로그래밍/C#

C#에서 virtual, new, override ...

 

 

.

 

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace TestE
{
    class Base
    {
        public void MethodA()
        {
            Console.WriteLine("Base Method()");
        }

        // virtual 키워드를 사용하면 이 클레스를 상속받는 차일드에서 override를 하여 재정의 해야 한다.
        virtual public void MethodB()
        {
            Console.WriteLine("virtual B");
        }
    }
    class Program : Base
    {
        // new 연산자를 사용하면 Base를 상속받은 함수를 덮어쓸수 있다..
        new public void MethodA()
        {
            Console.WriteLine("Program Method()");
        }

        override public void MethodB()
        {
            Console.WriteLine("override B");
        }
        public void MethodC()
        {
            // 앞에 base 를 붙여주면 override 된 함수가 아닌 parent 에 virtual 키워드가 붙은 함수가 호출된다.
            base.MethodB();
        }
        static void Main(string[] args)
        {
            // new 를 사용했을 경우에는 업캐스팅을 했을때 base 클레스의 내용이 그대로 호출되지만
            // virtual 메소드를 override 했을 경우에는 업캐스팅을해도 child 클래스의 내용이 호출된다.
            Program p = new Program();
            p.MethodA(); // Program 의 MethodA 를 호출한다.
            p.MethodB(); // Program 의 MethodB 를 호출한다.

            Base b = p; // 업캐스팅..
            b.MethodA(); // Base 의 MethodA 를 호출한다.
            b.MethodB(); // Program 의 MethodB 를 호출한다.
            b.MethodC(); // Base MethodB 호출..
        }
    }
}


// base 키워드는 this 키워드와 마찬가지로 부모의 생성자도 호출 가능하다 ex ) base(), this()

 

 

 

 

 

 

 

 

 

 

 

 

.