#topicpath ※ページ名は、「C#」と書けないので仕方なく。 //////////////////////////////////////////////////////////////////////////////// * 目次 [#uf66a7a3] #contents(); //////////////////////////////////////////////////////////////////////////////// * データ型 [#x78ac039] //------------------------------------------------------------------------------ ** 構造体とクラス [#nff7fc6a] - 構造体は値型。 - クラスは参照型 -- 削除されてもすぐには実体は消えない。実体を消すのはガベージコレクタ。 //////////////////////////////////////////////////////////////////////////////// * delegate [#c966138b] - C++ でいう「関数ポインタ」のようなもの - マルチキャスト機能があるので、自分で実行側にListや配列を用意する必要がない - マルチキャスト機能があるので、実装者が自分で実行側にListや配列を用意する必要がない - 例 using System; // delegate の宣言 delegate int FuncHoge( int a ); class Test { void Increment( int in ) { return( in + 1 ); } static void Main() { // delegate を作成 FuncHoge hoge = Increment; // マルチキャストにする場合は、"=" ではなく "+=" にする。 int x = hoge( 1 ); // Test::Increment( 1 ) の内容が実行される Console.WriteLine( "hoge: [result:" + x.ToString() + "]\n" ); } } - ハンドラ関数を1つも挿してない状態で呼び出すと null exception で落ちる。~ → タイミング等によりハンドラが挿されている保証がないケースでは、呼び出し側で null check が必要。 //////////////////////////////////////////////////////////////////////////////// * Dispose [#nbe4498e] - [[IDisposable インターフェイス(MSDN)>http://msdn.microsoft.com/ja-jp/library/vstudio/system.idisposable.aspx]] //////////////////////////////////////////////////////////////////////////////// * プリプロセッサ [#yebc2c25] ** #define [#qb1f3734] - ファイルの先頭に書く必要がある。 class内などで定義するとエラーになる。 - C/C++ のように値を定義することはできない。 #define DEBUG // OK #define TEST 1 // NG: 値は定義できない ** #if / #else / #endif [#fa2104dd] - 基本的に C/C++ と一緒。 public class Test { public Test() {} public void Print() { #if DEBUG System.Console.WriteLine( "This is Test\n" ); #else System.Console.WriteLine( "This is NOT Test\n" ); #endif } } - #if 0 は書けない。 #if false // 0 ではなく false と書くと無効に出来る ... #endif ** #ifdef は使えない [#m008ede3] //////////////////////////////////////////////////////////////////////////////// * System.Console.WriteLine() のフォーマット [#x0b45150] - 「"フォーマット文字列", 変数0, 変数1, 変数2」の場合(例) string var0 = "string0"; int var1 = 1; float var2 = 0.101; System.Console.WriteLine( "{0} {1} {2}", var0, var1, var2 ); 結果: string0 1 0.101 System.Console.WriteLine( "{2} {1} {0}", var0, var1, var2 ); 結果: 0.101 1 string0 //////////////////////////////////////////////////////////////////////////////// * 不要関数の削除について [#vd55fae4] - リフレクションを使っている場合、その関数が本当に使用されていないかどうかは、コード上からは特定困難。