2022年01月02日
川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説! total 854 count

メソッド呼び出し: メソッドを呼び出す2つの方法

Written By: 川俣 晶連絡先

この章のテーマ §

 メソッド呼び出しのバリエーションについて学びます。

前提知識 §

Console.WriteLineメソッド, 文字列の基礎, 変数の基礎, string型, メソッドの基礎, デリゲート型

解説 §

 メソッドを呼び出す方法は、大きく分けて2つあります。

 一つはそのメソッドの名前そのものを書いて、"メソッド名(引数リスト)"のような書式で呼び出す方法です。

 もう一つは、メソッドへの参照をデリゲート型の値として取得し、それを"式(引数リスト)"のような書式で経由して呼び出す方法です。

 つまり、括弧の手前に書かれた名前はいつもメソッド名とは限りません。

 また、式の値を経由して呼び出す場合は、サンプルソースの"myArray[123 + 456 - 579]("配列経由で呼ぶぞ");"のように、メソッド呼び出しに見えない書式になることもありますが、それでもメソッドは呼び出されています。

罠の数々 §

  • デリゲート型の値を経由して呼び出す場合、呼び出すものはラムダ式などでも良い
  • メソッドの呼び出しは、スコープで制約されるが、参照を変数に入れて持ち出せばスコープ外からも呼び出せる

参考リンク §

メソッド (C# プログラミング ガイド)

デリゲートの使用 (C# プログラミング ガイド)

サンプルソース: callingMethods §

myMethod("普通に呼ぶぞ");

Action<string> myVar = myMethod;

myVar("変数経由で呼ぶぞ");

var myArray = new Action<string>[] { myMethod };

myArray[123 + 456 - 579]("配列経由で呼ぶぞ");

void myMethod(string message)

{

    Console.WriteLine($"myMethod called: {message}");

}

実行結果 §

myMethod called: 普通に呼ぶぞ

myMethod called: 変数経由で呼ぶぞ

myMethod called: 配列経由で呼ぶぞ

リポジトリ §

https://github.com/autumn009/CSharpPrimer2

練習問題 §

 プログラムの実行中にデリゲート型の変数の値を書き換えた。

 以下のプログラムの実行結果を予測してみよう。

Action a = sub1;

a();

a = sub2;

a();

void sub1() => Console.Write("sub1 ");

void sub2() => Console.Write("sub2 ");

  1. sub1 sub1
  2. sub1 sub2
  3. sub2 sub2
  4. 実行時の例外
  5. コンパイルエラー

[[解答]]

単行本情報