- 追加された行はこの色です。
- 削除された行はこの色です。
#topicpath
※ページ名は、「C#」と書けないので仕方なく。
////////////////////////////////////////////////////////////////////////////////
* 目次 [#uf66a7a3]
#contents();
////////////////////////////////////////////////////////////////////////////////
* データ型 [#x78ac039]
//------------------------------------------------------------------------------
** 構造体とクラス [#nff7fc6a]
- 構造体は値型。
- クラスは参照型
-- 削除されてもすぐには実体は消えない。実体を消すのはガベージコレクタ。
////////////////////////////////////////////////////////////////////////////////
* delegate [#c966138b]
- C++ でいう「関数ポインタ」のようなもの
- マルチキャスト機能があるので、自分で実行側に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
}
}
** #ifdef は使えない [#m008ede3]
////////////////////////////////////////////////////////////////////////////////
* System.Console.WriteLine() のフォーマット [#x0b45150]
- 「"フォーマット文字列", 変数0, 変数1, 変数2」の場合(例)
string val0 = "string0";
int val1 = 1;
float val2 = 0.101;
System.Console.WriteLine( "{0} {1} {2}", );
結果:
string0 1 0.101
////////////////////////////////////////////////////////////////////////////////
* 不要関数の削除について [#vd55fae4]
- リフレクションを使っている場合、その関数が本当に使用されていないかどうかは、コード上からは特定困難。