0

AccountManager(私が呼んでいるように)を使用してアプリケーションを拡張しています。アプリケーションにはログイン フォーム (メイン フォームとは異なるフォーム) があり、ここに入力された情報setAccountManagerクラスに送信されます。

AccountManager AM = new AccountManager();
AM.username = "Username";
AM.password = "myPassword";

しかし、(おそらく明らかな) 問題は、メイン フォームでこの情報を取得できないことですnew AccountManager();( AccountManager.

AccountManagerクラス ( ) をグローバルに使用するにはどうすればよいですか? それとも、static属性を使用してそれらをパブリック変数にするだけですか?

4

5 に答える 5

3

アカウント マネージャーの内部静的シングルトン インスタンスを作成します。

public class AccountManager
{
    private static Lazy<AccountManager> _am = new Lazy<AccountManager>();
    internal static AccountManager Current { get { return _am.Value; } }
}

このようにして、同じアセンブリ内のどこからでも、現在のアプリケーション ドメイン内の AccountManager の (保証された) シングルトン インスタンスにアクセスできます: AccountManager.Current

Lazy のコンストラクター メソッドを調べます。必要に応じてファクトリ メソッドを指定できます (これにより、パスワードを適切にカプセル化したままにすることができます)。また、ファクトリ メソッドのスレッド セーフを保証することもできます。

また、Lazy は、AccountManager オブジェクトの構築で発生したコストのかかる操作が、絶対に必要になるまで遅延されることを意味します。つまり、アプリは絶対に必要になるまでリソースを使用しません。

于 2013-04-16T14:07:27.790 に答える
2

AccountManager AM をパラメーターとしてログインフォームに渡すことができます。

loginForm.Show(AM);

そしてloginFormには次のようなものがあるはずです:

AccountManager accountManager = null;
public DialogResult ShowDialog(AccountManager am)
{
accountManager = am;
return this.ShowDialog();    
}
于 2013-04-16T14:01:52.510 に答える
0

次の方法を使用して解決しました。

私のmainFormで、次のことを開始しAccountManagerます。

public static AccountManager AM = new AccountManager();

次に、にアクセスする必要がある各フォームでAccountManager、次のコードを使用します。

AccountManager AM = mainForm.AM;
MessageBox.Show(AM.username);
于 2013-04-17T11:56:23.013 に答える
-1

次のように変数をconstructorofに送信できます。AccountManager

オンMain:

AccountManager AM = new AccountManager(Username, Password);

オンAccountManager:

public AccountManager(string username, string password)
{

}

AccountManagerまたは、 staticを作成することもできますclass:

静的クラス MSDN

于 2013-04-16T13:58:31.283 に答える