ではソースを。
using System;
class HelloWorld
{
public static void Main()
{
Console.WriteLine("Hello World!");
}
}
ソースの内容について。
Console.WriteLine("Hello World!");がBASICでいうところのPrint "Hello World!"だということはすぐわかりますが、前後にやたらいろいろ付け加えられて面倒くさい。
これはCの系統であるということらしいですな。
基本的にすべての命令文は関数として扱われると。
すべての言語はとりあえず命令文、条件分岐、演算がわかれば何となく記述できると思うんですが、CやJAVAなどの系統の言語の面倒くささがよく出てると思います。
ただし、大規模なプログラムを作るとき、このあたりを厳密にすることで再利用性の高いコードを記述することができるようになるというのがオブジェクト指向言語のメリットということのようだ。
では下記から細かくいろいろ。
'using System;'
はusing以下に記述された名称の名前空間が完全修飾名で記述しなくても良くなる。
具体的にはこのソース中だとConsole.WriteLine();がSystemという標準クラス群の中に属する。
これを記述するのは
System.Console.WriteLine();
としなければならないが、usingに記述したことで省略可能になる。
ちなみにセミコロン";"は大括弧"{}"で閉ざされた空間の中に手続きを記述する際、一つ一つの手続きの終末に付加する。
付け加えるなら"空間"という表現だが後述のクラス、メソッドなどを含めてすべてのメンバーは"名前空間"で特定される。
これを把握するのはかなり重要っぽい。
'class HelloWorld{ }'
class で指定されたHelloWorldという名称のクラスが作成される。
大括弧{}でくくられた範囲が指定された名称のクラスの空間となる。
'public static void Main(){ }'
これはMainという名称のHelloWorldクラスのメンバを規定している。
public は、このメンバの有効なアクセス範囲を指定するものでアクセス修飾子という。
実は省略可。 その場合はpublicが暗黙に指定されたことになる。
static は特殊な修飾子でこのメンバーが静的に規定されることを意味する。
静的なメンバーはどこから呼び出されても同一のものである。
静的でないメンバーというのはどういうものかというと、インスタンスと呼ばれるもののこと。
すべてのメンバーは様々な場所から呼び出される可能性があるが、通常はクラスという決められた型を利用して実体を生成し、そのメンバーとして扱われるため同じメンバー名でも実体ごとに違う値をとる可能性がある。
ただし、静的メンバーとして宣言されたデータ、処理は別のインスタンスから呼び出されても同一の実体を参照する。
void もまた特殊な修飾子でこれは関数として扱うときの戻り値がない、ということ。
これは他から参照されて何かの値を戻すことを想定していないメインルーチンであるためこのような記述になる。
参照されて何らかの値を戻すときは戻す値のデータ型を記述する。
Main(){ }
これは()内に記述した引数で{}内の処理を行うメソッドというメンバーを生成するという意味。
たとえば
Main(string[] args){Console.Write(args[0]);}
とするとコマンドラインで与えた引数をそのまま表示する関数ができあがる。
いきなり書くとかなり意味不明。
たとえば以下のように書くとこれは通常のメンバとなる。
class Square
{
int X;
int Y;
public int Area()
{
return X*Y;
}
}
これを以下のように呼び出すと、それぞれ別の実体となる。
class Sikaku
{
public static void Main()
{
Square a = new Square();//四角形Aのインスタンス生成
Square b = new Square();//四角形Bのインスタンス生成
//四角形aの縦横設定
a.X = 10;
a.Y = 10;
//四角形bの縦横設定
b.X = 5;
b.Y = 15;
//四角形aと四角形bの面積表示
System.Console.WriteLine("aの面積{0}:bの面積{1}",a.Area,b.Area);
}
}
静的メンバーとしてはこうなる。
class Triangle
{
int X;
static int Y=5;
public int Area()
{
return (X*Y/2);
}
}
class Sankaku
{
static void Main()
{
Triangle a = new Triangle();//三角形aのインスタンス生成
Triangle b = new Triangle();//三角形bのインスタンス生成
a.X = 10;//高さ5の三角形aの底辺の長さを指定
b.X = 5; //高さ5の三角形bの底辺の長さを指定
System.Console.WriteLine("三角形aの面積{0}:三角形bの面積{1}",a.Area(),b.Area());
}
}
最終更新:2005年05月01日 00:50