728x90
300x250

[C#.NET] 클래스 - 부모와 자녀의 파라메터 값을 중복 허용

만약 부모와 자녀가 갖고 있는 공통의 값이 예를 들자면 핸드폰이 있다고 칩시다.
cel이라는 파라메터가 둘 다 필요하게 될 것입니다.
자녀는 부모 없이 존재가능한가요?
즉 다시말하면 부모와 자녀와의 관계에서 공통적으로 갖는 특색이 중복되어야만 할 상황이 생길 때 해결하는 방법입니다.


1. 기본 클래스 방법(New 클래스를 이용)

이 예제에서 기본 클래스 BaseC 및 파생 클래스 DerivedC는 동일한 필드 이름 x를 사용하므로 상속된 필드의 값이 숨겨집니다.
이 예제는 new 한정자의 사용법을 보여 줍니다. 또한 정규화된 이름을 사용하여 기본 클래스의 숨겨진 멤버에 액세스하는 방법을 보여 줍니다.

using System;
public class BaseC
{
    public static int x = 55;
    public static int y = 22;
}
public class DerivedC : BaseC
{
    new public static int x = 100;
    static void Main()
    {
        Console.WriteLine(x);
        Console.WriteLine(BaseC.x);
        Console.WriteLine(y);
    }
}

100
55
22

이 예제에서 중첩 클래스는 기본 클래스에서 이름이 동일한 클래스를 숨깁니다. 이 예제에서는 new 한정자를 사용하여 경고 메시지를 제거하고 정규화된 이름을 사용하여 숨겨진 클래스 멤버에 액세스하는 방법을 보여 줍니다.


using System;
public class BaseC
{
    public class NestedC
    {
        public int x = 200;
        public int y;
    }
}
public class DerivedC : BaseC
{
    new public class NestedC
    {
        public int x = 100;
        public int y;
    }
    static void Main()
    {
        NestedC c1 = new NestedC();
        BaseC.NestedC c2 = new BaseC.NestedC();
        Console.WriteLine(c1.x);
        Console.WriteLine(c2.x);
    }
}

출력 : 100
         200



2. Virtual 선언과 Overide 이용


using System;

class Player
{
    virtual public void showMessage()
    {
        Console.WriteLine("Player 클래스의 메시지");
    }
}

class StarcraftPlayer : Player
{
    public override void showMessage()
    {
        Console.WriteLine("StarcraftPlayer");
    }
}

class Program
{
    static void Main()
    {
        StarcraftPlayer sp = new StarcraftPlayer();
        sp.showMessage();
        Player p = new Player();
        p.showMessage();
    }
}


반응형

'소프트웨어(SW) > MS - Visual C#.NET' 카테고리의 다른 글

[C#.NET] Base64  (8) 2010.12.22
[C#.NET] 클래스 - Overriding 개념  (9) 2010.11.24
[C#.NET] Out과 Ref의 차이점  (6) 2010.11.19
[C#.NET] foreach 문  (6) 2010.11.17
[C#.NET] 구조체 설명  (6) 2010.11.17

+ Recent posts