- - PR -
static変数について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-03-02 12:43
C#のつもりでしたが…またやっちまったか軽率発言orz
今調べたんですけど、ひょっとしてこれのことですか?
とすると、間違ってるのは >アプリケーションの開始から終了まで こっちですか?それとも >アプリケーション内で1つ こっちも間違ってます?すみません、私もまだまだ初心者です… | ||||
|
投稿日時: 2005-03-02 12:51
いや、私は C# のことはほとんど知らないので分からないです。
(C# のことだとすると)結構 Java と違うなあ・・・と思って、どの言語か聞いてみた。 | ||||
|
投稿日時: 2005-03-02 13:57
文法から考えるのではなく、
クラスが実装する変数やメソッドの用途や意味から考えれば 「用途はこうだから、ここはstaticになるな」 と使い分けができると思います。 クラス設計に関して理解を深めるとよいかと思います。 関連して。 私はこの本をオススメします。 先に書いたように「用途はこうだから、このような文法になる」と 理解できる本です。 http://www.amazon.co.jp/exec/obidos/ASIN/475614179X/qid=1109738055/ref=sr_8_xs_ap_i1_xgl/250-5606225-8343438 | ||||
|
投稿日時: 2005-03-02 14:41
用途の一つとしてstaticフィールドでモード指定するというのがあります。
たとえばある自作クラス(MyClassとします)でSetMode(string mode) というようなメソッドを用意しSetMode("Read")というような使い方を 考えたとします。 この時、SetMode("READ")等スペルミスをしても、stringであることに 変わりはないのでコンパイル時に発見できません。 しかし、MyClass内でstatic const string READ="Read"と宣言することで、 SetMode(MyClass.READ)と指定できます。 これならばスペルミスをした場合に変数名が存在しないことになるので コンパイル時にエラーとして発見されるので、早期にエラー検出できることになります。 また、Math.PI等、定数値にも使われますね。 staticメソッドとしては、フィールドにデータを格納するのではなく 引数のデータを処理するだけのような場合Math.sin()のように 簡単にその機能を利用できます。 オブジェクト指向では、変数や関数はすべてクラス内に宣言することになるので staticで、宣言されることによって、いちいちインスタンス化する必要がなく 簡単に利用できるということになります。 [ メッセージ編集済み 編集者: たけぽん 編集日時 2005-03-02 15:20 ] | ||||
|
投稿日時: 2005-03-02 15:12
これは、いずれ Typesafe enum がサポートされて解決するかもね。 | ||||
|
投稿日時: 2005-03-02 15:21
えっ、C# にはないんですか? Generic もサポートしたんで当然あるんだと思ってたんですけど・・・。 | ||||
|
投稿日時: 2005-03-02 19:34
たくさんのお返事ありがとうございます。 ちょこちょこと記事を拝見してはいたのですがちょっと入りづらい?気がして お返事が遅くなりました。
ちょっと雰囲気と違う気がしますがこのあたりでありがとうございますとお返事させてもらいます。 staticが「変更できない??」というのは 「静的変数」という意味から推察しました。 英語でstaticというと 「静止した, 静的な; 【コンピュータ】スタティックな, 固定された状態の; 変化に乏しい, つまらない; 静体の; 静力学の;」 というような意味なので・・ どうもお騒がせしました。 偶然 参考にしていたサンプルコードもそう誤解するような使い方がしてありまして(−−: 特に、るぱんさん 一郎さん、お返事をいただいてstaticの意味がぴんときました。 ありがとうございます。 | ||||
|
投稿日時: 2005-03-02 20:30
>ほのぼのさん たけぽんさん
やっとstatic stringと constの違いが分かりました。 まだ私が 実用で使うのは難しそうですが staticは便利ですね。 どうも、ありがとうございました。 |