RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
▷ C#의 Overriding

오버라이딩이란 상위 클래스에서 선언된 함수를 하위 클래스에서 재정의 해서 무시한다는 뜻입니다.

오버라이딩에 사용하는 키워드로 new, virtual, override 가 있습니다.
 
간단한 밑의 예제를 보겠습니다.
    public class A
    {
        public void FuncA()
        {
            Console.WriteLine("A.FuncA()");
        }

        public virtual void FuncB()
        {
            Console.WriteLine("A.FuncB()");
        }
    }

    public class B : A
    {
        new public void FuncA()
        {
            Console.WriteLine("B.FuncA()");
        }

        public override void FuncB()
        {
            Console.WriteLine("B.FuncB()");
        }
    }

    class Program 
    {
        static void Main() 
        {
            B b = new B();
            A a = b;

            a.FuncA();
            a.FuncB();

            b.FuncA();
            b.FuncB();
        }
    }
결과는 아래와 같습니다.
A.FuncA() 
B.FuncB()
B.FuncA()
B.FuncB()

B 클래스의 객체를 생성해서 A 클래스로 업캐스팅을 하였습니다. 
new 를 사용해서 재정의된 B:FunA() 함수의 결과는 A.FuncA() 함수가 호출되었습니다. 이것은 new 키워드를 사용해서 재정의 후 업캐스팅 되었을 때, 상위 클래스의 함수만 호출하게 됩니다.

virtualoverride 키워드를 사용하여 재정의된 Func:B() 함수는 업캐스팅 후에도 여전히 B.FuncB()를 호출하는 것을 볼 수 있습니다. new는 다른 결과가 볼수있습니다. (virtualoverride 짝이 맞게 사용해야함)

 



▷ C#의 Overloading

C#의 오버로딩은 C++와 오버로딩과 같다고 보면 됩니다.

하나의 함수를 매개변수(Parameter)만 다르게 해서, 여러개 정의하는 것을 말합니다. 예제를 봅시다.

     public class A
    {
        public void FuncA(int a1)
        {
            Console.WriteLine(a1);
        }

        public void FuncA(float a1)
        {
            Console.WriteLine(a1);
        }

        public void FuncA(int a1, int a2)
        {
            Console.WriteLine(a1 + " " + a2);
        }

        public void FuncA(int a1, int a2, float a3)
        {
            Console.WriteLine(a1 + " " + a2 + " " + a3);
        }
    }

    class Program
    {
        static void Main()
        {
            A a = new A();
            a.FuncA(10);
            a.FuncA(10.5f);
            a.FuncA(10, 20);
            a.FuncA(10, 20, 30.5f);
        }
    }

결과는 아래와 같습니다.

10
10.5 
10 20
10 20 30.5

같은 이름 함수를 매개 변수만 다르게 해서 여러개 정의하여 사용할 수 있습니다.



링크
저작자 표시 비영리
신고

'.Net' 카테고리의 다른 글

Advanced C# - 한빛미디어  (1) 2010.12.09
C# 언어 명세서 (CSharp Language Specification)  (0) 2010.12.09
Sealed  (0) 2010.12.09
오버라이딩 (Overriding) 과 오버로딩 (Overloading)  (0) 2010.12.09
.NET Framework 의 Garbage Collection  (0) 2010.12.06
프로갱호:어제의 나보다 더 나아질수 있는 방법을 찾아서~!
어제의 나보다 더 나아질수 있는 방법을 찾아서~!
분류 전체보기 (61)
My Life (13)
Information for Dev (2)
Conference (1)
C Programming (0)
C++ Programming (2)
.Net (14)
Unity3D (14)
Script (1)
Architecture (1)
Design Pattern (0)
Game Technolog (2)
Visual Studio (0)
Network (1)
Financial Technology (0)
All Link (10)
«   2017/10   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
  1. coach usa  2013
    h..
  2. cheap nike shoes  2013
    h..
  3. cheap oakley sunglasses  2013
    ..
  4. prada  2013
    ..
  5. supra skytop  2013
    ..

티스토리 툴바