ナナエフ

同人ゲームサークル『7-FIELD』制作ブログ  -ゲーム制作やイベント参加などの活動情報 + 雑記-

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

【C#】定数の定義について

tetsuwoです。 【 twitter


たまにはプログラムのお話でも。

C#言語で定数を使いたい場合、一般的には「const」で定義すると思います。

しかし参照型は null でしか初期化出来ません・・・これ、意味あるのでしょうか?



特に定数の配列は使用したい事は多いのに使えない。

その解決につながる「readonly」の使い方について。
 
 
const/readonly の違い

定数 】 - ++C++; // 未確認飛行 C
                      
constreadonly
ローカル変数にも使えるクラスのメンバー変数のみ
常に静的変数と同じ扱いstatic の有無を変えられる
宣言時にのみ初期化可能コンストラクタ内で値を書き換え可能
コンパイル結果はリテラルと同等コンパイル結果は変数と同等
インスタンスを new で生成するようなものには使えないnew 可能


・・・と言ったような違いがあります。

今回はシンプルに使い方の紹介のため、詳細は割愛。気になる方は調べてみましょう。
 
 
 
readonly なら動的な初期化ができる!

▼ ① Constクラス・・・const/readonly の定数を定義
140318-01_const.png


ここでは以下の点に注目(赤の~線はエラー)。

・"const" での定義では int型/string型 共に、配列の定義はエラーとなる。
 格納値は、定義時に格納する必要あり。

・"readonly" での定義ならば配列定義でエラーなし、初期化の有無も自由。
 ※「ReadOnlyCollection<型>」も配列定義。代入は「AsReadOnly<型>」で行う。詳細は後述。

・"readonly" の定数は、定義時に初期化していなくても、コンストラクタで初期化可能。




▼ ② ConstSampleクラス・・・Constクラスを利用するメイン処理
140318-02_const.png


ここでは以下の点に注目(赤の~線はエラー)。

・Constクラスのインスタンス生成時、"readonly"定数の値を引数として渡せる。

"readonly" で定義した配列「CON.RONLY_INT_ARRAY2」は
 配列「int_set」を代入するとエラーになるものの、要素指定で代入できてしまう!


・そこで前述の 「ReadOnlyCollection<型>」で定義した定数を用いる。
 これならば、配列「str_set」の代入・要素指定の代入どちらもエラーとなるので値を保護することが出来る。




これだけ見ると、constよりもreadonlyが万能でよい気がしますが

処理が微妙に遅くなる事や、上記の表のような差があるので必要に応じて使い分けましょう。


ともかく、配列の定数は readonly 一択という認識でよいかと。
 
 
 
宣伝

2031年 秋、北守新都市。生活にAR技術が根付いたこの街で

"傷"を抱えた7人がそれぞれに見出す"真実"とは。


ad4_introduction01.png

当サークル第2弾作品「薄鈍アドベント」DL販売中です。

体験版も公開しておりますので、目に止まりましたらお試しあれ。
 
スポンサーサイト
  1. 2014/03/18(火) 21:00:00|
  2. 制作
  3. | トラックバック:0

トラックバック

トラックバック URL
http://7fblog.blog.fc2.com/tb.php/366-8a23472a
この記事にトラックバックする(FC2ブログユーザー)

カウンター

プロフィール

akinasi, tetsuwo

Author:akinasi, tetsuwo
FC2ブログへようこそ!

検索フォーム

カレンダー

07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

告知 (63)
制作 (88)
ソフト紹介 (19)
素材紹介 (10)
言外 (7)
雑記 (361)
ナナエ (29)

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。