CSharp_nested


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

C#でCっぽいプログラムを打つ

オブジェクト指向言語としてはあまり好まれない記述なのですが、Cっぽい手続き型のプログラムを打ってみましょう。

ハローワールド

ごめんなさい、いつものコンソールでハローワールドです。
C#はWindowsの開発したプログラミング言語なので、基本的にはWindowsの開発環境を利用します。VisualC#。
http://www.microsoft.com/japan/msdn/vstudio/express/

linuxやMacでも使えるオープンソースのCSharpコンパイラmonoもありますが、今回は紹介のみで使い方は自力で検索してください。

で、導入すら面倒だったので某センターで行うことにしました。申し訳ない。
では早速VisualC#を起動し、プロジェクトを作成してください。高速に開発を行うためにテンプレートが用意されているのですが、今回は基本を押さえるために空のプロジェクトを選択します。
次に「プロジェクト」=>「新しい項目の追加」で、ソースファイルをプロジェクトに追加します。追加するものは「ソースコード」です。名前は何でもOK。 では次のソースコードを打ってみよう。1ファイルに1個以上クラスは記述できるので、いつものC言語のファイル分割の様にその機能がわかるの名前でいいです。

using System;
class Program
{
 static void Main(){
   System.Console.WriteLine("helloWorld!");
   //待機用Read.
   System.Console.Read();
   }
}

動きましたでしょうか?画面上にhelloWorld!と出ればOKです。ではソースコードの解説を行うので次の項目に行きましょう。

すべての関数は何かに属している

C言語と違って関数は何かに属しています。(この属しているという言葉は一般的な表現ではない)関数を属させることのできるモノは2つあって、その一つにクラスがあります。 staticをつけて関数を作ると、その関数を囲っているクラスというものに関数が属します。 ではstatic修飾詞をつけて関数を定義し、Main関数から呼び出して見ましょう。

using System;

class Program{
 static void Main(){//voidが引数の場合は何も書かない
  int fact = 0;

  fact = Program.Factorial(4);
  System.Console.WriteLine(fact);
  //待機用Read.
  System.Console.Read();
 }
 //階乗計算
 static int Factorial(int n){
  int ans = 1;

  for (int i = 1; i <= n; i++){
   ans *= i;
  }
  return ans;
 }
}
こんな感じ。そこで見て欲しいのがMain関数からfactorial関数を呼び出す時。
Program.Factorial();という具合に呼び出しているのがわかります。
Factorial関数はProgramクラスに属しているのがわかるでしょう。(さっき書いたらProgram.は省略できたけど)
ということでどんな関数でもこのように何かしらに属しているモンなのであります。

クラスはさらに名前空間に属している

このソースコードは要素として1つ書き落としています。namespaceってヤツです。
using System;
namespace First{
 class Program{
  static void Main(){//voidが引数の場合は何も書かない
   int fact = 0;

   fact = Program.Factorial(4);

   System.Console.WriteLine(fact);
   //待機用Read.
   System.Console.Read();
  }
  //階乗計算
  static int Factorial(int n){
   int ans=1;

   for (int i=1; i <= n; i++){
    ans *= i;
   }
   return ans;
  }
 }
}

最近のC++を利用している人なら知っているかもしれませんが、
名前空間という機能です。他のソースコードで利用しているクラス名などの重複を防ぐために利用します。
namespace Ooo{}の中で定義されたクラスはoooに属します。
このOooに書いてあるクラスを利用したい場合はソースコードの頭の方に using Ooo; と記述します。
これはJavaのpackageに相当します。ファイルとしてソースコードが違っても同じ名前空間で括られていた場合は、
同じ名前空間として認識され、using Ooo;したときにプロジェクト内のOooでくくられているクラスは全部利用可能になります。

ウインドウでもハローワールド

アセンブリの参照の説明もできると思ったので、ウインドウでもハローワールドを行います。
C#は.NETFrameworkを利用するための言語として作られました。 .NETFramework(以下.NET)は、ウインドウやら、
ボタンやら通信用プログラムむやら、よく使う処理をあらかじめ用意しておくことで、あとは一部を書き換えたり、
組み合わせるだけでプログラムを作ることが可能になる、マイクロソフトの粋な計らいです。
これから利用するのはSystem.Windows.Forms名前空間ですが、これを利用するためにはアセンブリを参照しなければいけません。
アセンブリはdll又は.exeとなっており、C言語のdllや.libの呼び出しとなんら変わりません。
この機械語をリンクさせる必要があるので、プロジェクトに参照するアセンブリを設定する必要があります。
「プロジェクト」=>「参照の追加」をクリックして、.NETタブのSystem.Windows.Formsをクリックして追加します。
ではコードを書いてみてください。

using System;
using System.Windows.Forms;
class HelloWorld{
 static void Main(String[] argv){
  //Windowプログラムから入れるなんてリッチメンですね、あなた。
  MessageBox.Show("HelloWorld!","What's up?!");
 }
}

ちなみに
MessageBox.Show("HelloWorld!","What's up?!");

という記述は省略しないと
System.Windows.Forms.MessageBox.Show("HelloWorld!","What's up?!");
となりますが、usingしている部分は省略できるので書かなくてもOKということになります。
コンソールの画面を消したい場合はプロジェクト->プロジェクトのプロパティをクリックして
出力の種類をコンソールアプリケーションからWindowsアプリケーションに変更します。