2009年12月2日水曜日

統合開発環境 IDE(Integrated Development Invironment)

Microsoft Visual C# 2008 Express Edition

今日書いたソースコード。

オーバーライドのしくみとポリモーフィズム(多様性)、

using System;
// 基本クラス
class VisualStudio
{
    public virtual void ideInfo()
    {
        Console.WriteLine("VisualStudio");
    }
}
// 派生クラス
class VS2008 : VisualStudio
{
    // 同じメソッドを定義
    public override void ideInfo()
    {
        Console.WriteLine("VS2008");
    }
}
// 派生クラス
class VS2005 : VisualStudio
{
    // 同じメソッドを定義
    public override void ideInfo()
    {
        Console.WriteLine("VS2005");
    }
}

class MainClass
{
    static void Main()
    {
        // VisualStudioクラス型の変数
        VisualStudio v;

        // VS2008クラスのインスタンスを代入
        v = new VS2008();
        v.ideInfo(); // 出力値:VS2008

        // VS2005クラスのインスタンスを代入
        v = new VS2005();
        v.ideInfo(); // 出力値:VS2005
    }
}

同様のことを仮想メソッドではなくnewキーワードを使用してメソッドを隠蔽すると、ポリモーフィズムが機能しなくなる。

using System;
// 基本クラス
class VisualStudio
{
    public virtual void ideInfo()
    {
        Console.WriteLine("VisualStudio");
    }
}
// 派生クラス
class VS2008 : VisualStudio
{
    // メソッドを隠蔽
    new public void ideInfo()
    {
        Console.WriteLine("VS2008");
    }
}

class MainClass
{
    static void Main()
    {
        // VisualStudioクラス型の変数
        VisualStudio v;

        // VS2008クラスのインスタンスを代入
        v = new VS2008();
        v.ideInfo(); /* 出力値:VisualStudio
                      * ポリモーフィズムは機能しない*/
    }
}

abstractキーワードを付け、オーバーライドが前提となっているメソッド、抽象メソッドを使用してみる。

using System;

// 基本クラス(抽象クラス)
abstract class VisualStudio
{
    // 抽象メソッド
    public abstract void ideInfo();
}
// 派生クラス
class VS2008 : VisualStudio
{
    /* 基本クラスが抽象クラス(メソッド)のため
     * overrideを付ける */
    public override void ideInfo()
    {
        Console.WriteLine("VS2008");
    }
}

class MainClass
{
    static void Main()
    {
        VS2008 v8 = new VS2008();
        v8.ideInfo(); // 出力値:VS2008
    }
}

インターフェイスを使用してみる。

using System;
// インターフェイス
interface IideInfo
{
    /* アクセス修飾子、abstractキーワードは不要
     * 全てpublic、abstractとみなされる */
    void ideInfo();
}
// 派生クラス
class SampleClass : IideInfo
{
    public void ideInfo()
    {
        Console.WriteLine("SampleClass");
    }
}

class MainClass
{
    static void Main()
    {
        SampleClass s = new SampleClass();
        s.ideInfo(); // 出力値:SampleClass
    }
}

プログラミング学習は、今のところ数学学習と違い壁にはまだぶつからずにスムーズに進めていくことができていて嬉しいです。数学学習、プログラミング学習を両方とも少しずつですが並行して取り組んでいてよかったなあと感じたりしています。

なので、明日からもプログラミング学習がわくわく楽しみな今日この頃です。

0 コメント:

コメントを投稿