0

我正在用一个AccountManager(我称之为)扩展我的应用程序。该应用程序有一个登录表单(它与主表单不同),此处输入的信息将set发送给AccountManager班级:

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 回答
0

检查下面。帐户类包含用户名和密码。使用 AccountManager 初始化 Account 对象一次。使用 AccountManager.GetAccountInfo() 方法全局获取 Account obj。

class Account
{
    public string username { get; set; }
    public string password { get; set; }

    public Account(string username, string password)
    {
        this.username = username;
        this.password = password;
    }
}

class AccountManager
{
    Account acc = null;

    public AccountManager(string username, string password)
    {
        if(acc == null)
        {
            acc = new Account(username, password);
        }
    }

    public Account GetAccountInfo()
    {
        return acc;
    }
}
于 2013-04-16T14:13:55.227 回答
-1

您可以将变量发送到constructor如下AccountManager

Main

AccountManager AM = new AccountManager(Username, Password);

AccountManager

public AccountManager(string username, string password)
{

}

或者你可以做AccountManager一个静态的class

静态类 MSDN

于 2013-04-16T13:58:31.283 回答