プログラミング C# をまとめてメモしてみる
普段はPHPだとかJavascriptばっかり触っているので、とても新鮮で楽しいでございます!
動作環境
VisualStudio for Mac - COMMUNITY -
バージョン 8.3.1(build 18)
スコープ
基本的には他の言語とも変わりない Block内で有効なスコープは- Block前に宣言されたもの
- Blockの中で宣言されたもの
int a1 = 0;
{
// このスコープで作成されたものは外には出れない
int a2 = 0; // ①
a1 = 1;
}
// Blockの中にある変数を宣言しようとすると、Block内がコンパイルエラー(①)になる↑
int a2 = 9; // ②
①(Block内) と ②(Block外) の2箇所で宣言すると以下のような現象が発生する
②のいちで二重定義になっているが、①でエラーが発生する。短いコードならまだすぐに発見できるけどもスコープが広くなると厄介になりそうな予感
宣言空間 なるものによる仕様らしい
コンパイルシンボル
プリプロセスで参照されるディレクティブ
#define
#if
#else
#elif
#endif
#define DEBUG // ステートメントでは無いので最後のセミコロンはいらない
using System; // 最初のステートメント
...
...
...
#if DEBUG
Console.WriteLine("Debug Mode.");
#else
Console.WriteLine("Prod Mode.");
#endif
#define
はファイルの一番先頭に記述 ※ 最初のステートメントよりも先に定義する必要がある
ステートメントよりも前であればいいので、コンパイルシンボルをコンパイルシンボルで分けて定義するとかわけのわからないこともできる(ということ)
#define AAA
#if AAA
#define BBB
#else
#define CCC
#endif
#define DDD
using System;
...
System.Diagnostics.Conditional
を利用することで、コンパイルシンボルの設定に合わせてMethodの定義が可能
コンパイルシンボルが定義されていればコンパイルされ、定義されていなければコンパイルのタイミングでよしなに削除してくれる。
デバッグ用のメソッドとかこれでかける(Prodビルドのときは製品に含まれない)
CompileMethod();
[System.Diagnostics.Conditional("DEBUG")]
static void CompileMethod()
{
Console.WriteLine("DEBUG Compile Method");
}
#error #warning
コンパイルシンボルのなかで強制的にエラー/ワーニングを発生させるときにつかう#error えらーなんよ
#warning わーにんぐ
#line
あまり使いみちも無い気もするけども エラーが起こったときに強制的に行番号とファイル名を書き換える#line 999 "FUGAFUGA"
int a = "string"; // int型にStringを入れようとしている エラー
エラーコンソールの表示では 行番号:999
ファイル名:FUGAFUGA
となる
たとえこの場所がmain.csの10行目であろうとも