#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]
- リフレクションを使っている場合、その関数が本当に使用されていないかどうかは、コード上からは特定困難。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS