日記帳だ! with Tux on Libserver

二度目の大改造!! 日記帳…か?を継承し、より柔軟でパワフルなBlogに変身しました。

RSSに対応しています。リンク・コメント・トラックバックは自由にしていただいてほぼ問題ありません。
RSS購読方法、僕のリンク・コメント・トラックバックについての考えを読むことをおすすめします。

<< 過去

未来 >>

静的変数ってどれぐらい役に立つ?

C#の静的メソッドは、なぜかクラスに属さないといけない。
そんなのはあんまり気にすることではないし、Javaでもそのはず。
まぁC#のルールを乱さないため便宜上クラスに属していると、そう考えるのが妥当でしょう。
すべてのメソッド・プロパティはクラスまたは構造体に属するというやつね。
まぁそんなもんかと思えば納得のいく話です。
だから関連するクラスに静的クラス・静的プロパティを配置したとそういうことです。
例えば、単位ベクトルのプロパティをベクトルクラスに設けたり。
まぁ静的メソッドにせよ静的プロパティにせよ道具箱の側面が強い。
ところが静的変数というのもある。
ただ、これも道具箱的な使い方をされることの方が多いと思う。
readonly修飾子と静的コンストラクタと呼ばれる、クラスがメモリ上に呼び込まれるとき実行されるものの組み合わせで。
  static class foo {
static readonly public vector i;
static foo() { i=new vector(1, 0); }
}
staticかつreadonlyな変数。これを静的コンストラクタで初期化すると。
staticは付けるけど、publicは付けない、だって勝手に呼び出されるものだから。
これは普通のコンストラクタとは無関係なので。
これを活用したテスト。
    static public void Main(string[] args) {
Console.WriteLine(foo.i);
foo.i.inc();
Console.WriteLine(foo.i);
}
foo.i.inc();でfoo.iの値を改変しようと思ったがなぜか変わらない。
きちんとreadonlyの効果はあるようだ。
ただし、これはvectorが構造体、すなわちfoo.iが値型であるから。値型は変数自体に実体が入ってる。
参照型の場合、readonlyにしたところで、参照するインスタンスの内容は勝手に改変できる。
ここから考えるに、定数的なものは
●一時的か、publicでもπ・eなどの不変な数値・文字・文字列の定数 : const
●変わるかも知れない数値・文字・文字列の定数、数値・文字以外の値型の定数 : readonlyな静的変数
●参照型の定数 : getのみの静的プロパティ
まぁconstの使い道というのは実に狭くて、普通はメソッドの中の一時的な定数であることが多いですよね。
たとえ不変だとしても、3とか0.3とか'a'とか"Hello"とかいうものしかconstにできない。
結局便利なのは静的プロパティだと思ってたわけだ。
まぁしかし、readonlyな静的変数というのもありだとは思った。
けどそんなに構造体は使わないからね。あと、readonlyとはいえ変数とはねぇ。
と、まぁ定数的な使い道を書いてきたわけだけど、
実は大域変数としての役目も果たすと。
しかし、大域変数なんて今の時代流行りませんよ。
通し番号を作るのに使えるという例もあるけど、
実際は通し番号ジェネレータークラスを作って、インスタンスをずっと使い続けるのがいい。
随分下品なやり方です。まぁしかし、こういう考えもできる。
その大域変数的な静的変数をprivateにして、特定の静的メソッドからしか使わないと。
そうすれば、外から見てれば、なんか重ならない番号を作ってくれてるらしいと。
なら誰も気にしないと。別に変な番号が来ても重ならないならいいかと。
多少はましな気がする。まぁそれにしても、気持ち悪いですけどね。
Author : Hidemaro
Date : 2008/07/27(Sun) 23:19
コンピュータ・インターネット | Comment | trackback (0)
blog comments powered by Disqus

トラックバック

トラックバックURL取得

Tools