前回の記事でメソッドの基本的な形を紹介しました。それでは早速、応用例としてstring型の変数に代入された文字列を編集するサンプルプログラムを作成して見ましょう。今回はメソッド中のメソッドの存在や引数を複数指定するメソッドなどを注目してください。
using System;
namespace Method1
{
  class MyMethod
  {
    public static void Main()
    {
      // 文字列を代入します。少し長めの代入時にはこのように折り返すことも可能です。
      string myString = "MOの登場:近年のメディアは飛躍を続け、最近では"+
              "1GBを越える容量を記録できるMOなども存在します。・・・";
      // MOをFDに変更した結果をコンソールに表示させるReplaceメソッド。引数が2つ必要です。
      Console.WriteLine(myString.Replace("MO","FD"));
      // 文字の数を表示するプロパティ。
      Console.WriteLine(myString.Length);
    }
  }
}
// 文章が100文字以上になるような長さになる場合はコードが混乱しますので、テキストファイル等
// を利用し標準入出力でプログラムに文章を取り込みましょう。
まず注目して頂きたいポイントはConsole.WriteLine()の引数にメソッドが指定されている事です。これは型さえマッチしていればメソッドやプロパティあるいは変数でも問題なく記述可能です。このサンプルはもちろん、フォーム上のテキストボックスに入力されたポイントにテキストを保存させたい場合などを始め、他にも非常に多くの場面で常用的に利用されます。
ここで問題なのですが、サンプルプログラムにはWriteLineメソッドの引数としてstring型の値を持つReplaceメソッドとintの型の値を持つLengthプロパティが存在しています。さて、これは一体どういうことでしょうか。自動変換しているようにも見えますが、実は同じメソッドに見えて同名の別のメソッドなのです。このように意味的には同じ処理を行い、2つ以上同名が存在するメソッドをオーバーロードされたメソッドと呼びます。
このように自分で作成しなくても、始めから便利で有用なメソッドが山のように存在します。myStringの内容をユニークな文章に変えてまったReplaceもその一つです。myStringの3文字目から10文字目までを取り出す事や逆に削除することも可能です。詳細はMSDN等に掲載されていますので、参考になさってください。次にメッセージボックスにコンソール上に入力された数値を取得し計算結果を算出させて見ましょう。
// MessageBoxクラスはSystem.Windows.Forms名前空間から発生します。
using System;
using System.Windows.Forms;
namespace FromTextBox
{
  class Class1
  {
    public static void Main()
    {
      int num;
      // WriteLineは改行を行うのに対し、Writeは改行しません。
      Console.Write("2x+4の計算を行います。数値を入力してください。:");
      // 文字列を読み取るメソッドです。
      string reader = Console.ReadLine();
      // 誤って数値以外の文字を入力すると、「intに変換できない」と例外が発生。
      try
      {
        // MessageBoxにintのオーバーロードが存在しないので、stringに変換します。
        num = int(reader)*2+4;
        MessageBox.Show(num.ToString(),"計算結果");
        Console.WriteLine("計算が終了しました。");
      }
      catch
      {
        Console.WriteLine("{0} は無効です。",reader);
      }
    }
  }
}
// 今回は紹介の為に利用していますが、コンソールアプリケーション上でのMessageBoxは
// 極力利用を避け、WriteLine等で書き出しを行うのが混乱防止の為ベストです。
それでは最後になりましたが、プロパティとは一体何なのでしょうか、メソッドに大変よく似ていますが少し様子が違うようです。感の良い読者はお気付きになられたかも知れませんが、()がありません。引数の必要がなくてもメソッドには、この()が必要なのです。したがって、プログラム中の動作からプロパティは「値の読み取りをするもの」と推察できたでしょう。他にも書き込みや計算を行う事の出来るプロパティもありますが、これについて、詳しくはプロパティ編で行うこととします。