Visual C# イロハのイ 03 演算子 例外処理など

̃Gg[͂ĂȃubN}[Nɒlj

C#シリーズ第3回。
今回は演算子、例外処理について。

代入

ボックス化(Boxing) :値型を参照型に変換
ボックス化解除(UnBoxing):参照型を値型に変換

連結演算子

+演算子を使用して文字列を連結できる。

string s1, s2, s3;
s1 = "Hello" + "World";	/*	"HelloWorld"となる	*/
s2 = "7" + 7;	/*	"77"となる					*/

論理演算子

/*	以下はbool型及びbitごと						*/
bool val1 = true & false;	/*	論理積			*/
bool val1 = true | false;	/*	論理和			*/
bool val1 = true ^ false;	/*	排他的論理和	*/
/*	以下はbool型のみ							*/
bool val1 = !true;			/*	否定			*/
bool val1 = true && false;	/*	論理積			*/
bool val1 = true || false;	/*	論理和			*/

型情報演算子

/*	as演算子											*/
/*	互換性がある参照型間で型変換を行う					*/
/*	互換性がない場合、nullを渡す						*/
/*	キャスト演算子の場合、互換性がなければ、例外を発生	*/
/*	させるが、as演算子は発生させない。					*/
object o1 = 123;
string val1 = o1 as string;	/*	val1にはnullが代入される		*/

object o2 = "123";
string val2 = o2 as string;	/*	val2には文字列123が代入される	*/
/*	is演算子												*/
/*	指定した型にオブジェクトを例外を発生させることなく		*/
/*	キャストできる場合はture、できない場合はfalseを返す		*/
object o3 = 123;
string val3 = o3 is string;	/*	val3にはfalseが代入される	*/

object o4 = 123;
string val4 = o3 is object;	/*	val4にはtrueが代入される	*/
/*	sizeof演算子											*/
/*	値型のサイズを返す。単位はbyte。						*/
int val5 = sizeof(long);	/*	val5には8が代入される		*/
/*	typeof演算子											*/
/*	型のオブジェクトを返す。								*/
System.Type = val6 = typeof(int);	/*	val6にはSystem.Int32が代入される	*/

foreachステートメント

配列またはコレクション内の全要素に対して、
処理を行う場合に便利

foreach(型 変数名 in 配列)
{
	/*	処理	*/
}
string[] rgb = {"Red", "Green", "Blue"};
foreach(string color in rgb)
{
	Console.WriteLine("{0}", color);
}

continueステートメント

繰り返しステートメントのブロックにおいて、
continueステートメント以降にあるステートメントを
実行せずに、次の繰り返しに制御を移動する。

gotoステートメント

プログラムのステートメントをラベル付き
ステートメントに移動する。
ラベル付きステートメントは、ラベル名:
のように記述する。
switchブロックのcase:やdefault:も
ラベル付きステートメントと見なされる。

例外処理ステートメント

try-catch-finallyステートメント

try
{
	/*	処理	*/
}
catch(OverflowException e)
{
	/*	オーバーフローの例外をキャッチ	*/
	Console.WriteLine("Exception : {0}", e.Message);
}
catch(DivideByZeroException e)
{
	/*	0による除算の例外をキャッチ		*/
	Console.WriteLine("Exception : {0}", e.Message);
}
catch(Exception e)
{
	Console.WriteLine("Message    : {0}", e.Message);
	Console.WriteLine("Type       : {0}", e.GetType().FullName);
	Console.WriteLine("StackTrace : {0}", e.StackTrace.ToString());
}
finally
{
	/*	このブロックはなくてもよい						*/
	/*	例外が発生してもしなくてもここに制御が移動する	*/
}

throwステートメント

通常、tryブロックまたはcatchブロックに追加する。

int val=0;
try
{
	for(int i=0; i<10; i++)
	{
		if(i - 2 == 0){
			/*	分母が0だったならば明示的に例外を通知	*/
			/*	Messageも指定できる						*/
			throw new DivideByZeroException("Zero was detected.");
		}
		val = 100 / (i - 2);
	}
}
catch(Exception e)
{
	if(e is DivideByZeroException)
	{
		/*	例外の種類の判別はis演算子で行う				*/
		/*	上記で通知した例外ならばMessageは、				*/
		/*	指定したもの(Zero was detected.)が表示される	*/
		Consolo.WriteLine("{0}", e.Message);
	}
}

checked, uncheckedステートメント

checked
{
	/*	ここではオーバーフローチェックが有効	*/
}
unchecked
{
	/*	ここではオーバーフローチェックが無効	*/
}

次回はメソッド、プリプロセッサディレクティブについて執筆します。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です