この記事は、
初心者のためのC#プログラミング本格入門38の続きです。前回は、インスタンスごとに変数を持つ方法である「フィールド」について解説しました。今回は、メソッドの種類について解説します。
前回、フィールドを定義しインスタンスごとに値を保持する方法を学びました。次に学習する事は、「
インスタンスメソッド」です。
今までメソッドの種類について詳しく解説しませんでしたが、実はメソッドには2つの種類が存在します。それは、今まで使ってきた
静的メソッドとこれから新しく学ぶインスタンスメソッドです。インスタンスメソッドというと、何か得体のしれないものだと感じるかもしれませんが、文法は凄く単純で使いやすいものです。
メソッドの定義の仕方が変わるだけなので、サンプルプログラムを見れば文法は直ぐに分かります。
//staticキーワードがないだけ
void AnalyzeExpression( string inputValue )
{
//後で掲載
}
今まではstatic AnalyzeExpression( string inputValue ){}とメソッドを定義していました。それが静的メソッドです。一方インスタンスメソッドは、staticキーワードを書かなくてもOKです。
オブジェクト指向プログラミングで、単純にメソッドというとインスタンスメソッドを指します。ですから、こちらの方が簡単な文法となっています。
両メソッドの違いは
フィールドの扱い方にあります。静的メソッドは特別な指定をしない限りアクセスできず推奨もされていません。その理由については初心者にとっては難しいと思いますので、他の理由ととともに少しずつ解説していきます。
インスタンスメソッド(通常はメソッドと呼ぶ)は、インスタンスのフィールドにアクセスできます。それを確かめる為に、サンプルプログラムを見てみましょう。
class Analyzer
{
//各種フィールドを定義
bool success;
char sign;
int[] values;
int count;
public void AnalyzeExpression( string inputValue )
{
//数値を取り出す
string tmp = inputValue;
bool loopFlag = true;
this.values = new int[ 100 ];
this.count = 0;
do
{
System.Tuple<bool, int, string> value = TryValue( tmp );
loopFlag = value.Item1;
if ( loopFlag == true )
{
++this.count;
int index = this.count - 1;
this.values[ index ] = value.Item2;
tmp = value.Item3;
}
} while ( loopFlag == true );
//符号を取り出す
System.Tuple<bool, char, string> signInfo = GetSign( tmp );
this.sign = signInfo.Item2;
//処理が成功しているか否かを記録
this.success = this.count != 0 & signInfo.Item1 == true;
}
static System.Tuple<bool, char, string>
GetSign( string inputValue )
{
//省略
}
static System.Tuple<bool, int, string> TryValue( string inputValue )
{
//省略
}
}
<
thisキーワードの部分に注目して下さい。「this.count = 0;」のようにフィールドにアクセスしています。この様に、
インスタンスメソッドはフィールドの値を自由に読み書きできます。なお、インスタンスメソッドは通常は省略してメソッドと呼びますので、これ以降メソッドと呼びます。
あと覚える事は呼び出し方です。メソッドの呼び出し方法は静的メソッドと少し違います。
static void Main()
{
Analyzer obj = new Analyzer();
obj.AnalyzeExpression( "+ 1 2 3" );
}
今までのサンプルは「AnalyzeExpression("+ 1 2 3")」の様に直接呼び出していましたが、メソッド(インスタンスメソッド)は必ずインスタンスを指定して呼び出します。その理由は、
インスタンスごとに保持する値が違うからです。
今回の記事を通じて、インスタンスを生成する理由が少し分かってきたと思います。そして、分かった瞬間楽しいと感じた人が多いと思います。少しずつ理由が分かってくるのがC#プログラミングの醍醐味でもあります。続く...
テーマ : プログラミング
ジャンル : コンピュータ