- PR -

static変数について

投稿者投稿内容
なっちゃん
常連さん
会議室デビュー日: 2005/02/11
投稿数: 21
投稿日時: 2005-03-01 16:11
様々な参考書を読んでみたのですが よく分からないので教えてください。

static とはどんなものなんでしょうか。
static string とconstはどのように違うのですか?

ヘルプにはstatic なメンバーは読み取り専用のものと似たような働きをする
とありますが、それはconst(定数?と思ってよい??)もそうではないでしょうか。

staticをどのような時に使用するのか いまいちつかめません。
よろしくお願いいたします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-03-01 16:29
こんにちは、じゃんぬねっと です。

Static 変数 (静的変数) を、Const などと比べるのが、
そもそも、間違ってるような気がします。
インスタンス変数と比べないと。

Static なメソッドから、インスタンス メンバにアクセスできないのは何故か?
インスタンス メソッドから、Static メンバ にアクセスすると、すべて同一なのは何故か?

その辺りを実際に組んで理解してください。
クラスは組んだことがあるでしょう?
_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-03-01 16:30
引用:

static とはどんなものなんでしょうか。



プログラミング言語は?
言語が異なればキーワードの効果も異なります。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-03-01 16:52
引用:

なっちゃんさんの書き込み (2005-03-01 16:11) より:
ヘルプにはstatic なメンバーは読み取り専用のものと似たような働きをする
とありますが、


という所から、staticではなくてreadonlyのことを言っているんじゃないですかね。
constは定数で、コンパイル時にその定数を参照している部分は値に置き換えられます。
readonlyはそのメンバを持つインスタンスが出来上がってしまった段階で変更ができなくなる変数です。
ですから、コンストラクタ内では値を設定することができます。

constはコンパイル時に定数の値に置き換えられるので、例えばA.exeとB.dllがあって、B.dll内の定数をA.exeで参照している状態でB.dllの定数の値を変更してもA.exeの動作には影響がありません。

--------------
ちなみに、constキーワードを付けたメンバは自動的にstatic(つまりクラスのメンバ)になってしまいます。


[ メッセージ編集済み 編集者: 一郎 編集日時 2005-03-01 16:57 ]
なっちゃん
常連さん
会議室デビュー日: 2005/02/11
投稿数: 21
投稿日時: 2005-03-01 18:47
お返事ありがとうございます。

C#をつかっています。
すみません、さらに分からなくなりました。

static変数(静的変数) ・・変更不可
インスタンス変数     ・・読み取り・書き込みできる
という風につかんでいるのですが おかしいでしょうか?


Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2005-03-01 18:56
取りあえず
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/csref/html/vclrfModifiersKeywords.asp
この辺を熟読すべきだと思います。
サンプルコードも載っている事だし。

読めば分かりますが、staticの説明のどこにも変更不可だとか読み取りしかできないだとかは書かれていません。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-03-01 19:02
引用:

static変数(静的変数) ・・変更不可



間違いです。
C# の static にそんな効用はないです。

const か readonly が伴わない限り、static 変数/インスタンス変数伴に読み書き可能です。


_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-03-01 21:01
ども、ぼのぼの@C#は初心者です。

VB.NETだとstaticに該当するキーワードはShared(=共用の)です。
意味を知るだけならこっちの方がイメージが沸き易いんではないでしょうか?

ちなみにstatic(=静的な)の語源はC言語まで遡って、そこではメモリ上のアドレスが固定になるって意味だったんですけど、C#だと内部的にはどうなんでしょ?ちょっとわかりません…

ちなみにconst(ant=固定の)とreadnly(=読み取り専用の)はVB.NETでも同じ。こちらは、読んだままの意味です。

スキルアップ/キャリアアップ(JOB@IT)