コード例 #1
0
    void Test02()
    {
        C07_3_Player player1 = new C07_3_Knight();
        C07_3_Player player2 = new C07_3_Archor();
        C07_3_Player player3 = new C07_3_Mage();

        Debug.Log("--------------이동 함수 발동 시-----------");
        player1.Move(); // 기사의 Move()는 new로 선언했으므로 별개의 함수다. 여기선 Player로 불러왔으니 Player의 이동 함수만 실행된다.
        player2.Move(); // 궁수의 Move()는 부모 클래스를 오버라이드했다. 따라서 자식 클래스 Archor의 이동 함수만 실행된다.
        player3.Move(); // 마법사의 Move()는 부모 클래스를 오버라이드했지만, 부모 클래스의 함수를 base.Move()로 추가해 주었다. 따라서 부모 클래스와 자식 클래스의 함수가 둘 다 실행된다.
    }
コード例 #2
0
    C07_3_Player GetPlayer(int type)
    {
        C07_3_Player player = null;

        switch (type)
        {
        case 0:
            player = new C07_3_Knight();
            break;

        case 1:
            player = new C07_3_Archor();
            break;

        case 2:
            player = new C07_3_Mage();
            break;
        }

        return(player);
    }
コード例 #3
0
    void Test03()
    {
        C07_3_Player player   = GetPlayer(1);
        bool         isKnight = player is C07_3_Knight; //'변수 is 클래스'의 형태를 bool 값으로 반환한다. 변수가 해당 클래스거나 해당 클래스의 자식 클래스면 true 이다.

        if (isKnight)
        {
            Debug.Log("기사 생성");
        }
        else if (player is C07_3_Archor)
        {
            Debug.Log("궁수 생성");
        }

        C07_3_Player player2 = GetPlayer(2);     //Player로 불러왔으므로 아직 Mage에만 존재하는 mp 변수는 쓸 수 없다.

        player2.Attack();                        //Player 클래스에 존재하는 함수나 변수는 조작 가능하다.

        C07_3_Mage mage = player2 as C07_3_Mage; //자식 클래스로 캐스팅할 수 있다. Mage를 가지고 있지 않다면 Null Reference 에러가 뜬다.

        mage.mp = 100;                           //Mage로 불러왔으니 Mage에만 존재하는 변수를 조작할 수 있다.
        Debug.Log($"마법사의 마나: {mage.mp}");
    }