無差別に技術をついばむ鳥

情報処理技術全般を気まぐれにつつくゆるいブログです

C#をつつく17−多態性。曖昧なものを具体化。

この記事で最後のオブジェクト指向プログラミングの機能多態性(ポリモーフィズム) に関するC#の機能を扱ってみよう。 名前は難しいけど、大したことしていないからみんなリラックスして読んでね。 さて、今回までにAnimal抽象クラスを元に、BirdクラスとHumanクラスを作ったけど、 個性が無いとつまらないよね? それに、そもそも同じ機能ならば作る意味が無いピヨね。 ということでAnimal抽象クラスに一つメソッドを追加するピヨ。 ではさっそくコードだぁー。

public abstract class Animal
{
    private string m_Name;

    public string Name {
        get { return m_Name; }
        set { m_Name = value; }
    }
    private int m_Age;

    public int Age {
        get { return m_Age; }
        set {
            if ( value > 0 ) m_Age = value;
        }
    }

    public Animal( string name, int age ) {
        this.Name = name;
        this.Age = age;
    }

    public void Talk( ) {
        Console.WriteLine( "私は{0}。年は{1}だよ。",
            this.m_Name, this.m_Age );
    }

    //ここに機能を追加
    public abstract void Move( );
}

さっそくこのコードをコンパイルしてね。 コンパイルしたら・・・

'Bird' は継承抽象メンバ 'Animal.Move()' を実装しません。
'Human' は継承抽象メンバ 'Animal.Move()' を実装しません。

とC#コンパイラに怒られるピヨ。でも、これでいいんだ。 こうすることによって、新しいDogクラスとかを作る際にMoveメソッドの実装を忘れないで済むんだ。
C#コンパイラに怒られたからMoveメソッドを実装してみよう。
public class Bird : Animal
{
    public Bird( string name, int age ) : base ( name, age ) { }

    public override void Move( ) {
        Console.WriteLine( "バサバサバサバサ" );
    }
}

public class Human : Animal
{
    public Human( string name, int age ) : base( name, age ) { }

    public override void Move( ) {
        Console.WriteLine( "テクテクテクテク" );
    }
}

class Program
{
    static void Main( string[ ] args ) {
        Bird tori = new Bird( "インドリ", 29);
        tori.Move( );
        Console.WriteLine( "{0}参上!", tori.Name);
        tori.Talk( );
        Console.WriteLine( );

        Human dre = new Human( "ドリィちゃん", 16 );
        dre.Move( );
        Console.WriteLine( "{0}参上!", dre.Name );
        dre.Talk( );
        Console.WriteLine( );
    }
}
このコードを実行してごらん。同じ同じMoveメソッドでも実行結果が違うピヨ。 これが多態性(ポリモーフィズム)なんだ。
突然だけど、長すぎると読みにくいので次回へ続く。
別窓 | C# | コメント:0 | トラックバック:0 | ∧top | under∨
<<VB.NETをつつく17−多態性。曖昧なものを具体化。 | 無差別に技術をついばむ鳥 | C++/CLIをつつく16−抽象型。時には曖昧に。>>

この記事のコメント

∧top | under∨

コメントの投稿

 

管理者だけに閲覧
 

この記事のトラックバック

∧top | under∨
| 無差別に技術をついばむ鳥 |