C#でconstな配列を実現する

配列ってconst宣言できないのか。。

これをコンパイルしようとすると、

エラー 1 ‘StudyCppLang.SampleClass.stringArray’ の型は ‘string[]’ です。文字列以外の参照型の const フィールドは null でのみ初期化できます。

といってエラーになってしまった。

 

文字列以外はnullでのみ初期化できるということは、nullで初期化して、constだから割り当てることはできないということで、ずっとnullのままになってしまうということだよね?

 

それではダメじゃないかということで、なんとか他の集団でconstっぽく実装できないか考えてみた。

 

constっぽい実装とは何か?

さて、まずはconstっぽい実装とは何かについて明確にしておく。

私が今回やりたいことは、

 

としてアクセスしたい

 

は許可されないでほしい。

 

も許可されないでほしい。

 

以上が、今回私がconstっぽく実装したい内容だ。

readonlyキーワードを使用する

readonlyキーワードは、変数宣言に、割り当て後の変数には2度と再割り当て処理を行えないという意味を付加する。

 

期待通り、

は失敗する。

 

しかし、

は成功してしまう。

 

これは、readonlyの制限が、配列の内容の変更まで制限してくれるわけではないためだ。

内容が変更できない配列

内容が変更できない配列というのがある。

 

System.Collections.ObjectModel.ReadOnlyCollection

だ。

 

これを使って配列宣言をしてみる。

 

これで、内容も変更できない、constらしい配列を宣言することができた。

コメントを残す

トラックバック: http://pgnote.net/wp-trackback.php?p=885