講義メモ

・p.195「メソッドのオーバーロード」から

提出:ミニ演習 mini193.cs・改

・アレンジ演習:p.191 changearray01.csを元に、引数のaとbの和をout waで、差をout saで、積をout seiで返すメソッドにしてみよう
 void modify(int a, int b, out int wa, out int sa, out int seki){…}

作成例

//ミニ演習 mini193.cs・改
using System;
class change {
    public void modify(int a, int b, out int wa, out int sa, out int seki) { //aとbの和差積を返すメソッド
        wa = a + b; //和を格納する 
        sa = (a > b) ? a - b : b - a; //差を格納する 
        seki = a * b; //積を格納する 
    }
}
class changearray01 {
    public static void Main(){
        change c = new change();
        int x, y, z; //宣言のみで良い
        c.modify(10, 20, out x, out y, out z); //参照渡しで和差積を書きこんでもらう
        Console.WriteLine("{0}と{1}の和は{2},差は{3},積は{4}", 10, 20, x, y, z);
    }
}

p.195 メソッドのオーバーロード

・p.168のとおり、シグニチャ(引数の数、型、並び)が異なるコンストラクタを複数定義できることをオーバーロードという
・メソッドもオーバーロードが可能で、シグニチャが異なる同じ名前のメソッドを複数定義できる
・なお、メソッドのシグニチャには戻り値型は含まれないので、戻り値型のみが異なるメソッドの複数定義はできない
・これは呼び出し時に区別できないから
・なお、整数⇒実数のように暗黙の型変換により一致するオーバーロードがあれば、それが採用される
・メソッドのオーバーロードにより、同じ意味のメソッドは同じ名前にできる

アレンジ演習:p.195 overload01.cs

・第5のバージョンとして「Method(double x, double y)」を適当な内容で追加し、呼び出せることを確認しよう
・Mainメソッドで、m.Method(5.1, 6)を呼び出すと、暗黙の型変換によりこの第5のバージョンが動作することを確認しよう

作成例

//p.195 overload01.cs
using System;
class manymethods
{
    public int Method(int x) {
        Console.WriteLine("第1のバージョンが呼ばれました");
        return x + 10;
    }
    public double Method(double x) {
        Console.WriteLine("第2のバージョンが呼ばれました");
        return x * 2;
    }
    public string Method(string x) {
        Console.WriteLine("第3のバージョンが呼ばれました");
        return x += "です";
    }
    public int Method(int x, int y) {
        Console.WriteLine("第4のバージョンか呼ばれました");
        return x + y;
    }
    public double Method(double x, double y) { //【以下追加】
        Console.WriteLine("第5のバージョンか呼ばれました");
        return x + y;
    }
}
class overload01 {
    public static void Main() {
        manymethods m = new manymethods();
        Console.WriteLine("その戻り値は「{0}」です", m.Method(3)); //第1のバージョンを呼ぶ
        Console.WriteLine("その戻り値は「{0}」です", m.Method(3.2));  //第2のバージョンを呼ぶ
        Console.WriteLine("その戻り値は「{0}」です", m.Method("粂井")); //第3のバージョンを呼ぶ
        Console.WriteLine("その戻り値は「{0}」です", m.Method(5, 6)); //第4のバージョンを呼ぶ
        Console.WriteLine("その戻り値は「{0}」です", m.Method(5.1, 6)); //【追加】第5のバージョンを呼ぶ
    }
}

p.197 Mainメソッドのオーバーロード

・Mainメソッドは特殊なメソッドであり、コンソールプログラム等の動作の始点になる
・通常、public static voidとし、引数は指定しないが、バリエーション(オーバーロード)がある。
・戻り値型をvoidからintにすると「return 整数値」が記述可能になり、このプログラムを呼び出した元に整数値を返すことができる
・なお、VisualStudioのデバッグ機能から呼び出した場合は、返される値は表示されないが、一般に、正常終了したら0を、
 でなければ0以外を返すことが多い
・Windowsではビルド済のプログラムをVisualStudioを介さずに実行し、戻り値を表示する方法がある(後述)
・また、引数にstring[]=文字列配列を指定すると、起動時に、システムから複数の文字列を渡すことができる
・この文字列をコマンドライン引数という
・VisualStudioでは、デバッグのプロパティでコマンドライン引数を指定できる
・Windowsではビルド済のプログラムをVisualStudioを介さずに実行し、実行時にコマンドライン引数を指定する方法がある(後述)

p.198 main01.cs:VisualStudioにおける実行方法

① ソースを記述する
②「デバッグ」「●のデバッグプロパティ」
③「コマンドライン引数」に「cat dog apple」と入力
④「ファイル」「すべて保存」
⑤「デバッグなしで開始」

p.198 main01.cs

//p.198 main01.cs
using System;
class main01 {
    public static int Main(string[] s) { //コマンドライン引数を受け取るMainメソッド
        int n;
        n = s.Length; //引数の数=配列の要素数を得る
        Console.WriteLine("引数の個数は{0}個です", n);
        if (n != 0) { //引数があれば(※このif文は実際は無用)
            for (int i = 0; i < n; i++) { //コマンドライン引数全てについて繰返す
                Console.WriteLine("引数{0} : {1}", i + 1, s[i]);
            }
        }
        return 0; //正常終了を返す
    }
}

p.198 main01.cs:開発者用コマンドプロンプトにおける実行方法

① ソースを記述し「ビルド」「ソリューションのビルド」(※既に実行済なら不用)
②「ツール」「コマンドライン」「開発者用コマンドプロンプト」
③「プロジェクト名\bin\debug\プロジェクト名 コマンドライン引数」を入力し、Enterで実行
例:Project1\bin\debug\Project1 cat dog apple
※ この時、②で表示される文字列をカレントディレクトリ(パス)という
例:F:\ha242_AkibaC#\Project1

p.198 main01.cs:通常のコマンドプロンプトにおける実行方法

① Windows10では「スタート」「Windowsシステムツール」「コマンドプロンプト」
  Windows11では「スタート」「すべてのアプリ」「Windowsツール」「コマンドプロンプト」
② カレントディレクトリ(パス)の先頭文字(ドライブレター)が「C」でなければ、ドライブレターと「:」を入力し、Enter
例:F:
③ カレントディレクトリ(パス)と「\」を入力し、続けて「プロジェクト名\bin\debug\プロジェクト名 コマンドライン引数」を入力し、
 Enterで実行
例:F:\ha242_AkibaC#\Project1\Project1\bin\debug\Project1 cat dog apple

p.199 main02.cs:通常のコマンドプロンプトで実行し戻り値を表示する方法

① Visual Studioでmain02.csのソースを記述し「ビルド」「ソリューションのビルド」
② Windows10では「スタート」「Windowsシステムツール」「コマンドプロンプト」
  Windows11では「スタート」「すべてのアプリ」「Windowsツール」「コマンドプロンプト」
③ カレントディレクトリ(パス)の先頭文字(ドライブレター)が「C」でなければ、ドライブレターと「:」を入力し、Enter
例:F:
④ カレントディレクトリ(パス)と「\」を入力し、続けて「プロジェクト名\bin\debug\プロジェクト名 コマンドライン引数」を入力し、
 Enterで実行
例:F:\ha242_AkibaC#\Project1\Project1\bin\debug\Project1 cat dog apple
⑤「echo %errorlevel%」と入力しEnterを押すと、戻り値が表示される

p.199 main02.cs

//p.199 main02.cs
using System;
class main02 {
    public static int Main(string[] args) { //コマンドライン引数を受け取り戻り値を返す
        if (args.Length != 1) { //コマンドライン引数が1個ではない?
            return -1; //-1を返す
        } else { //コマンドライン引数が1個?
            if (!Char.IsDigit(args[0][0])) { //第0要素の0文字目(引数の先頭文字)が数字以外?
                return -2; //-2を返す
            }
        }
        return int.Parse(args[0]); //第0要素を整数化して返す
    }
}

通常のコマンドプロンプトで実行し戻り値を表示する方法の例

F:\>F:\ha242_AkibaC#\Project1\Project1\bin\debug\Project1

F:\>echo %errorlevel%
-1

F:\>F:\ha242_AkibaC#\Project1\Project1\bin\debug\Project1 cat dog

F:\>echo %errorlevel%
-1

F:\>F:\ha242_AkibaC#\Project1\Project1\bin\debug\Project1 cat

F:\>echo %errorlevel%
-2

F:\>F:\ha242_AkibaC#\Project1\Project1\bin\debug\Project1 2100000000

F:\>echo %errorlevel%
2100000000

※ p.200のバッチファイルの説明は割愛します

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です