C#の基礎文法
目次
パソコンが得意な処理は記憶と計算です。この記憶と計算をパソコンにさせるために記述する文章をプログラムと言います。 このページでは以下について簡単に解説し、簡単なデータの記憶と計算処理について理解を深めます。
基礎文法
C#を使用するための基礎的な文法について説明していきます。
リテラル
ソースコードの中に直接数値や文字を記述することを言います。
1234
'a'
"Hello world"

コメント
ソースコードの中にプログラムの実行とは関係のないコメントを記述することができます。 コメントはプログラムの動作には何の影響を与えません。仕事でプログラムを作成する場合、複数人で作業をすることになります。 そのためソースコードでは読み解けないような内容を書いて他の人がプログラムを解読しやすいようにします。 例としてプログラムの動作の説明や変更履歴などを書きます。各行で//以降の文字がコメントになります。 複数行のコメントの場合は/* */で囲みます。下の例で緑色の部分がコメントになります。
1234    >//数値型のリテラル
'a'     >//文字型のリテラル
"Hello world"   //文字列のリテラル
/*
複数行のコメントの場合はこのように書きます。
*/

変数の宣言
変数とは値を一時的に保存するための機能です。変数を使用してコンピューターのメモリ上の値を書き換えることができます。 変数を使用するにはまず使用する変数の名前(識別子名または変数名)を宣言しなければなりません。以下のように記述します。
String myText;
この<型の名前> <変数名>のセットのことを変数を宣言するといいます。 この例の場合、型の名前がstring変数名がmyText ということになります。型の名前は何でも良いというわけではなく使用できる名前が決まっています。 よく使う型として以下のものがあります。
型の名前 キーワード 使用用途
String string 文字を保存するために使用します
Int32 int 数字を保存(整数のみ)するために使用します
Double double 数字を保存(少数を含む)するために使用します
Decimal decimal 正確な計算処理をしたいときに使用します
他にもたくさんありますがまずはこのあたりを覚えましょう。良く使う型なので簡単に書けるキーワードが用意されています。 下の二つは全く同じ意味になります。
String myText1;
string myText2;
変数名は基本的には自由に命名することができます。 A-Za-zと_を使って変数名を命名しておくと無難です。日本語でも命名できますが入力が遅くなる(変換しないといけない) のでやめたほうがいいでしょう。プログラミングの世界は英語が基本なので早い段階で慣れるために英語での変数名を推奨します。
※変数名に使用できる文字ですが詳しく見ると細かい決まりがあります。以下にまとめました。
  • ifやwhileなどのC#のキーワードは使用できない
  • 先頭の文字はアンダーバーもしくはletter-characterでなければならない
  • 変数名の前に@をつけるとキーワードも変数名として使用できる。コンパイラは@を無視して変数の変数名として認識する。 (@xとxは同じ変数名になる)
  • 先頭以外の文字はletter-character、decimal-digit-character、connecting-character、combining-character、 formatting-characterのいずれか以外でなければならない。
  • 変数名にはUnicodeエスケープシーケンス(\xxxxという処理機で4桁のUnicodeを書いたもの)も使用可能

変数への代入
宣言した変数へ値を代入するには以下のように書きます。
String myText;  //変数を宣言
myText = "Hello world!"; //値を代入
変数を宣言し値を代入するという処理を記述することは多いです。ひとまとめにして簡単に書くための書き方があります。
String myText = "Hello world!";  //変数を宣言して代入
変数に値を代入するときに代入可能な値と代入不可能な値があります。できるかできないかは型名によって決まります。 例えば文字列型の変数には文字列しか代入できません。文字列型の変数に数字を代入しようとするとエラーになります。
String myText = 123;  //エラー
数字を使用するときにはintなどの数字用の型を使用します。
Int32 myNumber = 123;  //Int32の変数には数字を代入可能
宣言した変数には必ず型があり型で決まっている値(文字列、数字などなど)以外は代入できない ということを覚えておきましょう。
型と変数
C#の基本の型としては以下のものがあります。
整数型
ソースコード中に数字を直接書き込むと数値型とみなされます。
int myNumber = 123;  //整数リテラル
数字の末尾にUやLなどの文字列をつけると符号無し整数、64Bit整数として解釈されます。Uはunsigned、Lはlongの頭文字です。
uint l = 86U;  //符号なし
long m = 1879L;  //Lを付けるとlongとみなされる
ulong n = 2419UL;  //UとLを付けるとulongとみなされる
浮動小数点型
ソースコード中に少数を直接書き込むと浮動小数点型とみなされます。 整数型と同様に末尾にFやMなどの文字をつけるとfloatやdecimalとして解釈されます。Fはfloatの頭文字、MはdecimalのMをとったものです。
double x = 5.12; //浮動小数点リテラル
float y = 4.73f; //fを付けると単精度
double z = 6.13e12; //指数表記 6.13×10^12
decimal m = 105.9m; //mを付けるとdecimalになる
論理値型
論理値型はtrueかfalseのどちらかの値を持ちます。主に条件式の判別時に使用されます。
bool b1 = true; //真である
bool b2 = false; //偽である
文字型
文字をシングルコーテーションで囲むと文字型(char型)とみなされます。文字型は1文字の文字を代入できる型です。 \マークをつけることで特殊文字を表現することも可能です。利用するには以下のように記述します。
char c1 = 'z';  //zを表す                     
char c2 = '\''; //シングルコーテーションを表す 
char c3 = '\"'; //ダブルコーテーションを表す   
char c4 = '\n'; //改行文字を表す               
char c5 = '\r'; //キャリッジリターンを表す     
char c6 = '\t'; //水平タブを表す               
char c7 = '\\'; //\を表す                      
char c8 = '\f'; //改ページを表す               
char c9 = '\0'; //nullを表す                   
char c9 = '\uXXXX';	//XXXXの文字コードの文字を表す
文字型は内部的には数値として管理されています。数値を文字に変換するための対応付けのルールのことを文字コードといいます。
文字列型
文字列型は複数の文字をまとめて代入できる型です。文字型と違ってダブルコーテーションで囲みます。
string s = "C#入門"; // 文字列リテラル
string x = "\uff9f\u0434\uff9f"; // Unicodeを直に入力。 ゚д゚ ←これが表示されます。
string path = @"C:\windows\system"; // @-quoted string。 \ 記号がそのまま解釈されます。
オブジェクト型
オブジェクト型には任意の型を代入することができます。
型の変換
キャスト
C#には上記以外にも様々な型があります。型を変換することをキャストと言います。異なるデータ型の変数に値を代入するにはキャストを行う必要があります。 キャストを行うためには(型名)を代入する値の左側に記述します。
Double d = 12;
String s = (string)d; //double型から文字列にキャスト。(string)dの部分は"12"になります。
Int32 x = (int)d; //double型から数値型にキャスト
数値から文字列型へのキャスト
C#の全ての型にはToString()というメソッドが用意されています。下記のコードは両方とも同じ結果になります。
Double d = 12;
String s1 = (String)d; //s1には"12"が入っている。
String s2 = d.ToString(); //s2には"12"が入っている。
文字列から数値型へのキャスト
数値型にはParseメソッドが用意されています。このメソッドを使用すると指定した値を数値に変換することができます。
String myText = "20";
Int32 x = Int32.Parse(myText); //20という数値をxに代入。
数字に変換できない文字列をParseメソッドに渡すと例外が発生します。文字列が変換可能かどうか検証し可能な場合に変換処理を行う ためのメソッドとしてTryParseというメソッドも用意されています。
Int32 x;
//変換ができた場合は戻り値はtrue。xに変換後の値が入っています。
if (Int32.TryParse("12", out x) == true) 
{
    //変換できた場合はxを使って何か処理をする
}
演算子
基本的な演算子の一覧を下に記述します。下の一覧では全角文字で記述しているものもありますが実際書くときには全て半角文字で記述してください。
演算子名 記号 概説
代入演算子 =、+=、-= 右辺の値を左辺に代入します
四則演算子 +、-、*、/ 足し算、引き算、掛け算、割り算
剰余演算子 割り算の余り
比較演算子 <、>、<=、>=、==、!= 2つの数の大小を比較しtrueかfalseを返す
論理演算子 &、^、| AND、XOR、OR
論理条件演算子 &&、|| AND演算、OR演算
代入演算子
代入演算子は左辺の値を右辺に代入します。数学の等号とは全く異なる意味なので注意してください。
Int32 x = 123; //123という値をxに代入する
四則演算子
実際にInt32の変数xに対して四則演算をした結果の一覧は以下のとおりです。
x = 2 + 3; //5
x = 2147483647 + 1; //-2147483648 Int32の最大値を超えてしまい、xはInt32の最小値になります
x = 3 - 2; //1
x = 2147483648 - 1; //2147483647 Int32の最小値を超えてしまい、xはInt32の最大値になります
x = 3 * 2; //6
x = 2147483647 * 2; //-2
x = 6 / 3; //2
x = 6 / 5; //1 整数の割り算では少数点以下の桁は無視される
UInt32を使用して演算した場合は以下のようになります。
x = 2147483647u + 1u; //2147483648
x = 4294967295u + 1u; //0 UInt32の最大値を超えてしまい、xはUInt32の最小値になります
x = 0u - 1u; //4294967295 UInt32の最小値を超えてしまい、xはUInt32の最大値になります
x = 2147483647u * 2u; //4294967294
x = 6u / 5u; //1 整数の割り算では少数点以下の桁は無視される
整数型で割り算が割り切れない場合は小数点以下の値は切り捨てられます。少数まで含んだ結果を知りたい場合にはDouble型などを使用します。
Double x = 6 / 5; //1.2
代入演算子の応用編として以下のような書き方もあります。
Int32 x = 123; //123という値をxに代入する
x += 2; //125 x=x+2と同じです。この場合、1行上の変数宣言時にx=123なので123+2=125となります。
x -= 3; //122 x=x-3と同じです。この場合、1行上の変数宣言時にx=125なので125-3=122となります。
x *= 2; //244 x=x*2と同じです。この場合、1行上の変数宣言時にx=122なので122*2=244となります。
剰余演算子
剰余演算子を使用すると割った余りの値を求めることができます。合計分から時間と分を求めるという使用例を以下に示します。
Int32 TotalMinute = 222; //合計時間(分)
//222を60で割った余りが(分)の部分になります。
Int32 Minute = TotalMinute % 60; //42
//時間は合計時間から(分)を引いて60で割った数になります。
Int32 Hour = (TotalMinute - Minute) / 60; //3
比較演算子
比較演算子の計算の結果の一覧は以下のとおりです。
b = (1 < 2); //True
b = (2 < 1); //False
b = (3 < 3); //False
b = (1 > 2); //False
b = (2 > 1); //True
b = (3 > 3); //False
b = (1 <= 2); //True
b = (2 <= 1) //False
b = (3 <= 3) //True
b = (1 >= 2) //False
b = (2 >= 1) //True
b = (3 >= 3) //True
b = (1 == 2) //False
b = (2 == 1) //False
b = (3 == 3) //True
b = (1 != 2) //True
b = (2 != 1) //True
b = (3 != 3) //False
多くの演算子は数学で見たことがあると思います。値が等しいかどうかを調べる==は代入演算子との区別をするため2つ重ねて記述します。 !=は等しくないかどうかを調べるための演算子です。等しくない場合Trueを返します。 これらの演算子で大部分の計算処理は可能です。演算子の詳細についてはこちらで解説しています。
演算子の詳細ページ
Create at 2012/1/4 LastUpdate 2012/1/5