プロが教える店舗&オフィスのセキュリティ対策術

今まで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()
{
・・・
}
}
}
と書きましたが、ビルドエラーになります。

A 回答 (3件)

まったく知らないけど、引数として受け渡す方法ではダメなのですか?


グローバルな変数は嫌われるので止めましょう。
    • good
    • 0
この回答へのお礼

> 引数として受け渡す方法
最初その方法は考えていたのですが、引数が多くなるため、
グローバル変数にしてしまおうと短絡的に考えたのですが...

> グローバルな変数は嫌われるので
とのアドバイスをいただき、
やはり引数で渡すようにします。
なるべく引数が少なくて済むようなコーディングをしようと思います。

アドバイスいただき、ありがとうございました。

お礼日時:2007/09/19 02:58

# ビルドエラーが出ているのならその内容を投稿しましょう


記憶域の違いでエラーになるんですよ
MainやMain2がstatic指定の静的関数に対し静的でないHensu3は変数にはアクセスできません

public static string Hensu3;
と宣言すれば 使えますよ

クラス宣言が staticクラスでなければインスタンス経由でなら静的でない変数にもアクセスできます
static void Main()
{
  Program p1 = new Program();
  p1.Hensu3 = "Hello";
  Console.WriteLine( p1.Hensu3 );
}
といった具合です
    • good
    • 0
この回答へのお礼

ご回答をいただき、色々と試してみました。

ここ数日、クラスやインスタンスなど、復習してみた結果、
変数の使い方というより、C#の根本を勘違いしていたようです。

> public static string Hensu3;と宣言すれば 使えますよ
無事、使えるようになりました。
どうしても使わなければならないところで、public変数を使い、
それ以外では、ローカル変数を使うようにします。

詳しい説明をしていただき、ありがとうございました。

お礼日時:2007/09/19 03:03

>やはり引数で渡すようにします。


>なるべく引数が少なくて済むようなコーディングをしようと思います。
それがいいです。
引数が多くなるのは、恐らく以下のようなケースです。

・実際はオブジェクトとして一つにまとめるべきものが、ネイティブタイプとしてばらばらなままになっているため、それをひとずつメソッドに渡す破目になっている。

・一つのメソッドが色々な仕事をし過ぎてきる。分割すれば、個々のメソッドへの引数の数が減る。
    • good
    • 0
この回答へのお礼

お礼が遅くなりましたが、
koko_u_さんのアドバイスを取り入れ、大分マシなコードになってきました。
メソッド分割で、引数が減るのに加え、コードも見やすくなりました。

ありがとうございました。

お礼日時:2007/11/01 00:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!