2009年12月1日火曜日

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

Mirosoft Visual C# 2008 Express Edition

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

partialキーワードを使用しクラスの定義を分割。

using System;

partial class Sample
{
    int n = 1;
}
partial class Sample
{
    public void sample()
    {
        Console.WriteLine(n);
    }
}
class MainClass
{
    static void Main()
    {
        Sample sampleClass = new Sample();
        sampleClass.sample(); // 出力値:1
    }
}

partialキーワードを使用しメソッドの宣言と定義を分割。

メソッドの宣言

using System;

partial class Sample
{
    static partial void sampleInfo();

    static void Main()
    {
        sampleInfo();  // 宣言のみで実行してもエラーにならない

        Console.WriteLine("World!"); // 出力値:Kamimura
    }
}
// メソッド(sampleInfo)の処理は別途ソースファイルを作成

メソッドの定義

using System;

partial class Sample
{
    static partial void sampleInfo()
    {
        Console.WriteLine("Hello,"); // 出力値:Hello,
    }
}

実行するとHello,World!と表示される。

基本クラス、派生クラスとアップキャスト、ダウンキャスト。

using System;
// 基本クラス
class VisualStudio
{
    public virtual void ideInfo()
    {
        Console.WriteLine("VisualStudio");
    }
}
// 派生クラス
class VisualWebDeveloper : VisualStudio
{
    // メソッドをオーバーライド
    public override void ideInfo()
    {
        Console.WriteLine("VisualWebDeveloper");
    }
}
// 派生クラス
class VisualStudio2005 : VisualStudio
{
    // メソッドを隠蔽
    new public void ideInfo()
    {
        Console.WriteLine("VisualStudio2005");
    }
}
class MainClass
{
    static void Main()
    {
        /* VisualWebDeveloperクラスのインスタンスを
        VisualStudioのクラス型の変数に代入 */

        VisualStudio v = new VisualWebDeveloper();

        /* VisualStudioクラス型の変数をキャストして
        VisualWebクラス型の変数に代入 */

        VisualWebDeveloper w = (VisualWebDeveloper)v;

        /* VisualStudioクラス型の変数をキャストして
          VisualStudio2005クラス型の変数に代入。
          ビルドは正常終了するが元がVisualWebDeveloper型なので
          実行時に動作停止 */

        VisualStudio2005 v5 = (VisualStudio2005)v;
    }
}

VisualStudio2005 v5 = (VisualStudio2005)vを削除すれば正常に動作する。Maineメソッドを書き換えてis 演算子で前もってダウンキャスト可能か診断してみる。

class MainClass
{
    static void Main()
    {
        VisualStudio v = new VisualWebDeveloper();
        VisualWebDeveloper w = (VisualWebDeveloper)v;

        Console.WriteLine(v is VisualWebDeveloper); // 出力値:True
        Console.WriteLine(v is VisualStudio2005);   // 出力値:False
    }
}

Mainメソッドを書き換えてas 演算子を使用しダウンキャストできない場合はnullを返す。

class MainClass
{
    static void Main()
    {
        VisualStudio v = new VisualWebDeveloper();

        VisualWebDeveloper w = v as VisualWebDeveloper;
        // ダウンキャストできない場合はnullを返す
        VisualStudio2005 v5 = v as VisualStudio2005;

        Console.WriteLine(w == null); // 出力値:False
        // nullを返していることを確認
        Console.WriteLine(v5 == null); // 出力値:True
    }
}

今のところ特に壁にぶつかることもなく日々プログラミング学習がより楽しくなっています。なので明日もプログラミング学習がわくわく楽しみな今日この頃です。

0 コメント:

コメントを投稿