- ベストアンサー
[C#]Public変数の使い方
今までVBを使っており、C#は初心者です。 VBでは、各関数にまたがって使う変数は、 private Hensu as integer Sub Kansuu1() Hensu = 2 Call Kansuu2() End Sub Sub Kansuu2() MsgBox Hensu End Sub と宣言すれば、使えますが、C#でそのような使い方はできないのでしょうか? 変数Hensu3をMainとMain2双方で使いたいとき、 using System; namespace ns1 { static class Program { public string Hensu3; static void Main(string[] args) { ・・・ } static void Main2() { ・・・ } } } と書きましたが、ビルドエラーになります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>やはり引数で渡すようにします。 >なるべく引数が少なくて済むようなコーディングをしようと思います。 それがいいです。 引数が多くなるのは、恐らく以下のようなケースです。 ・実際はオブジェクトとして一つにまとめるべきものが、ネイティブタイプとしてばらばらなままになっているため、それをひとずつメソッドに渡す破目になっている。 ・一つのメソッドが色々な仕事をし過ぎてきる。分割すれば、個々のメソッドへの引数の数が減る。
その他の回答 (2)
- redfox63
- ベストアンサー率71% (1325/1856)
# ビルドエラーが出ているのならその内容を投稿しましょう 記憶域の違いでエラーになるんですよ MainやMain2がstatic指定の静的関数に対し静的でないHensu3は変数にはアクセスできません public static string Hensu3; と宣言すれば 使えますよ クラス宣言が staticクラスでなければインスタンス経由でなら静的でない変数にもアクセスできます static void Main() { Program p1 = new Program(); p1.Hensu3 = "Hello"; Console.WriteLine( p1.Hensu3 ); } といった具合です
お礼
ご回答をいただき、色々と試してみました。 ここ数日、クラスやインスタンスなど、復習してみた結果、 変数の使い方というより、C#の根本を勘違いしていたようです。 > public static string Hensu3;と宣言すれば 使えますよ 無事、使えるようになりました。 どうしても使わなければならないところで、public変数を使い、 それ以外では、ローカル変数を使うようにします。 詳しい説明をしていただき、ありがとうございました。
- koko_u_
- ベストアンサー率18% (459/2509)
まったく知らないけど、引数として受け渡す方法ではダメなのですか? グローバルな変数は嫌われるので止めましょう。
お礼
> 引数として受け渡す方法 最初その方法は考えていたのですが、引数が多くなるため、 グローバル変数にしてしまおうと短絡的に考えたのですが... > グローバルな変数は嫌われるので とのアドバイスをいただき、 やはり引数で渡すようにします。 なるべく引数が少なくて済むようなコーディングをしようと思います。 アドバイスいただき、ありがとうございました。
お礼
お礼が遅くなりましたが、 koko_u_さんのアドバイスを取り入れ、大分マシなコードになってきました。 メソッド分割で、引数が減るのに加え、コードも見やすくなりました。 ありがとうございました。