C#の基礎
文字の出力
まず、C# 言語での開発はこれまでのプログラミング言語同様にソースを記述します
ソースプログラムは、メモ帳などのテキストエディタで C# を記述し
これを *.cs という拡張子で保存します(C# 言語の拡張子は cs です)
ここでは、C# プログラムを実際に記述しコンパイルして実行する過程を説明します
C# は、Java 同様にオブジェクト指向と呼ばれる種類の言語で
全てのコードはクラスと呼ばれる枠組の中で動作します
クラスの詳細はこの場で語るにはあまりに高度なので、C#の基本を網羅してから説明します
クラスの宣言には class キーワードを使います
この場では単純に次のように覚えて構いません
class class-name
class-name にはこのクラスの識別子を指定します
今は使いませんが、識別子は他のクラスなどからこのクラスを呼ぶ時に使用します
識別子の名前は、伝統的な C 言語の命名規則に基本的に従って付けることができます
識別子の最初の文字はアンダースコア ( _ )またはアルファベットです
さらに C# は @ 文字が最初のプリフィックスとして用いることも許されています
最初の文字以降では、アルファベット以外に数値などを指定することもできます
クラスの本体は { ではじまり } で終わります。ここまでが一つのクラスです
C# プログラムは、Main() という メソッド から開始されます
メソッドは、後ほどクラスと一緒に詳しく説明しますが
クラスに関連付けられた、そのクラスの「動作」を定義したプログラムの集合です
オブジェクト指向プログラムは全て、この「メソッド」の中にプログラムの動作を記述するのです
Main() メソッドは、C言語の main() 関数に相当するメソッドです
C# は C 言語同様に大文字と小文字を区別するので注意してください
C#のエントリポイント(プログラム開始位置)は main() ではなく Main() です
static void Main()
static や void というキーワードが付加されていますが、この意味は今は知らなくてかまいません
クラスやメソッドについて詳しく説明する時に、これらのことも知ることができるでしょう
とにかく、プログラムを開始する時はこの Main() メソッドから実行されるということを知ってください
メソッドもクラス同様に、本体は { から始まり } で終わります
class Test {
static void Main() {
}
}
これが、最小の C# プログラムです
Test クラスの Main() メソッドが実行されますが、Main() メソッドの本体は何も書かれていないため
このプログラムは何をすることもなく即座に終了してしまいます
このソースをコンパイルするには、エディタで書いたソースを保存し
コンパイラ(Microsoft .NET Framework SDK なら csc.exe)でコンパイルします
csc file-name
file-name にはファイル名を指定してください
これを、コンソールから実行してコンパイルすると実行ファイルが出力されます
これで、プログラムの実行方法がわかったと思います
次は、コンソールプログラムの基本である文字列の出力に挑戦しましょう
コンソールに文字列を表示するには System.Console.WriteLine() と記述します
この一つ一つの意味も、今後詳しく C# の仕様を学ぶことで知ることができるでしょう
WriteLine() はメソッド、Console は WriteLine() メソッドを定義しているクラスです
これらの機能は C# ではなく、.NET Framework Class Library が提供しているものであり
.NET 開発環境であれば C++ や Visual Basic .NET などからアクセスすることも可能です
メソッドには、パラメータと呼ばれるデータを渡すことができます
パラメータはメソッドの ( ) の中に記述します
どのようなパラメータを渡すかは、そのメソッドが何を要求しているかで決まります
WriteLine() メソッドは、数値、文字、文字列、浮動小数など、様々なものを渡せます
文字列は、必ず ダブルクォーテーション " で囲むというのが鉄則です
WriteLine("好きな文字") とすれば文字列をコンソールに出力できます
また、C# は一つの命令の終端をセミコロン ; で指定する必要があります
この仕様は C/C++ 経験者であれば、もはやお馴染みのものだと思います
class Test {
static void Main() {
System.Console.WriteLine("Kitty on your lap");
}
}
このプログラムをコンパイルして実行すると
コンソールに Kitty on your lap という文字列が表示されます
また、WriteLine() メソッドは文字の出力後に改行を自動的に付加します
ところで、このプログラムは機械語ではなくMSIL、すなわち中間言語にコンパイルされます
普段はそれが何なのかを気にする必要はありませんが、少し除いてみましょう
.NET Framework SDK は、ILDASM.EXE という逆アセンブルツールを含んでいます
このアプリケーションで .NET 実行ファイルを開くと MSIL を直接見ることができます
.method private hidebysig static void Main() cil managed
{
.entrypoint
// Code size 11 (0xb)
.maxstack 8
IL_0000: ldstr "Kitty on your lap"
IL_0005: call void [mscorlib]System.Console::WriteLine(string)
IL_000a: ret
} // end of method Test::Main
この場は C# の言語仕様を教えるべき場なので、これを説明することはしませんが
これは先ほどの C# プログラムをコンパイルした MSIL の言語そのものです
アセンブリ経験者であれば、ldstr でスタックに文字列をプッシュし
WriteLine() メソッドが呼び出され、その後 ret によって制御を戻していることがわかるでしょう
ホワイトスペース
C# は C/C++ 同様にホワイトスペースは識別子の区切りとして用いられ
それ以外の場所では自由にタブや改行を行うことができます
例えば class キーワードとその識別子は class Test と表現しています
これを classTest としするとそんなキーワードは存在しないのでエラーとなります
逆に class と識別子の間には何個空白があっても関係ありません
ホワイトスペースとは、改行やタブ、空白などのことです
基本的に何らかの要素のインラインにコードを各場合はタブを挿入します
要素 A {
要素 B {
要素 C {
}
}
}
要素 B は 要素 A のインラインであり、要素 C は 要素 B のインラインです
これは、現代プログラムのお約束の一つです
もちろんこれを守らなくてもコンパイルできますが、読みづらいソースとなり他のプログラマに嫌われます
次のようなプログラムでも、問題なくコンパイルできるのです
class
Test
{static void Main() {
System.
Console.
WriteLine(
"Kitty on your lap"
);
}
}
しかし、見てのとおり無意味に複雑で読みづらいですね
また、文字列は途中で改行できないということも知ってください
キーワードや識別子の途中でホワイトスペースを入れると、それが区切りだと解釈されるため
やはり Writ eLine() というようなコードを書いてもエラーになります
コメント
プログラムでは、巨大なプロジェクトになればソースは数万行に及ぶこともあります
それらの意味を正確に把握するのは、人間には至難のわざとなるでしょう
そこで、各場所にプログラムの意味や他のプログラムとの関係を明示するために
プログラムとな実際になんの関係もない文章を残しておくことがあります
私たちはこれをコメントと呼んでいます
C# のコメントは C++ のコメントの仕様とまったく同じです
複数の行にまたがるコメントの標準コメントと
単一行の1行コメントの2種類がサポートされています
標準コメントは /* で始まり */ で終わりです
この間は、改行も含めてコンパイラは無視するためソースから排除されます
1行コメントは // で始まりその行の終わりまでがコメントになります
標準コメントは長いコメントやファイルのヘッダ部分に詳細を記すのに便利で
1行コメントは、単一の文やメソッドなどの簡易説明によく使用されます
/* This is an example of Programing Language C#
2001 (c) Leon Akasaka
*/
class Test {
static void Main() {
System.Console.WriteLine("Kitty on your lap"); //I Love cat...
}
}
人の記憶は曖昧なので、できる限り詳細にコメントを残す癖をつけるべきです