【C#】定数にthisやbaseを付けてようとしてハマる
自クラスもしくは親クラスのクラス内のメンバにアクセスする際に、thisやbaseを明示的に記載していない部分がコード分析で警告(コード分析のエラーコード:SA1101)となったので、修正をしていたところ、定数を使用している部分でハマりました…。
「コード分析の指摘通り、thisやbaseを明示的に指定しようとしても、定数だけはコンパイルエラーでコード分析の対応できない!」と、しばし悩みました。
対応していたのは下記のようなコードです。
【親クラス】
【子クラス】
原因は「定数はStatic(静的メンバ)である」からでした。
this, baseはインスタンスを参照します。
一方、インスタンス参照で呼び出せないのが「Static(静的メンバ)」です。
※Static(静的メンバ)は「クラス名.定数名」、「クラス名.メソッド名」で呼ぶ
(サンプルコードの子クラス4番目のコード「クラス指定」の呼び方が該当)
そのため、コード分析通りにthisやbaseをつけて、定数を修正しようとすると、
インスタンス参照でStatic(静的メンバ)を呼び出す形となるため、コンパイルエラーになっていたのです。
なお、自クラスもしくは親クラスの定数はそのまま使用できる方が分かりやすいということで、
本修正では対象のコード分析の方を無効化して、そのままのコードで対処することになりました。
定数はStatic(静的メンバ)である、
実装やコード分析対応で詰まり、思い当たる原因がないときは思い出してくださいね。
ここまで読んでいただきありがとうございました。
コメントはご自由に投稿いただけると幸いです。
【参考URL(this, base)】
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/base
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/this