.
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()
.
'프로그래밍 > C#' 카테고리의 다른 글
C# 네트워크 라이브러리 (1) | 2013.08.12 |
---|---|
C# TextBox Enter 입력 (텍스트박스 엔터키 입력) (0) | 2013.08.05 |
C# 에서 class 상속 하는 방법 (클레스 상속, 클래스 상속) or 상속 금지 방법 or 외부 파일에서 사용 금지 함수 만들기 (0) | 2013.07.06 |
C# unsafe 와 fixed (포인터 안전하게 사용하기 char*, int* 등등..) (0) | 2013.07.06 |
C# 가비지 콜렉터와 메모리 (0) | 2013.07.06 |