0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Study C# - Scope, CompileSymbol -

Posted at

プログラミング 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行目であろうとも

#region #endregion

なにもしない。$region と #endregion が対になってるかをチェックする とある処理をブロック的に分けたいときに有用そう ブラケット `{}` で囲むと ブロックとして扱われてスコープが影響する
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?