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
728x90
300x250

[C#.NET] Out과 Ref의 차이점

Out은 FillArray(임의 선언)에서 초기화를 합니다.

using System;
class TestOut
{
    static void FillArray(out int[] arr)
    {
        arr = new int[5] { 1, 2, 3, 4, 5 };
    }
    static void Main()
    {
        int[] theArray;
        FillArray(out theArray);
        Console.WriteLine("Array elements are:");
        for (int i = 0; i < theArray.Length; i++)
            System.Console.WriteLine(theArray[i] + " ");
        System.Console.WriteLine("Press any key to exit");
    }
}

Ref는 Main 메서드에서 초기화합니다.


using System;
class TestRef
{
    static void FillArray(ref int[] arr)
    {
        if (arr == null)
        {
            arr = new int[10];
        }
        arr[0] = 1111;
        arr[4] = 5555;
    }
    static void Main()
    {
        int[] theArray = { 1, 2, 3, 4, 5 };
        FillArray(ref theArray);
        System.Console.WriteLine("Array elements are:");
        for (int i = 0; i < theArray.Length; i++)
            System.Console.WriteLine(theArray[i] + " ");
        System.Console.WriteLine("Press any key to exit");
    }
}

반응형

+ Recent posts