我正在使用AccountManager
扩展我的应用程序(我称之为)。该应用程序有一个登录表单(它与主表单不同),此处输入的信息为set
类AccountManager
:
AccountManager AM = new AccountManager();
AM.username = "Username";
AM.password = "myPassword";
但是,现在(可能很明显)问题是,我无法在主窗体上获取此信息(因为我调用new AccountManager();
所以它将启动AccountManager
的新实例。 / p>
如何在全球范围内使用班级(AccountManager
)?或者我是否只使用static
属性制作公共变量?
答案 0 :(得分: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对象时产生的任何昂贵操作都将被延迟,直到绝对必要,这意味着您的应用程序在绝对必要之前不会使用资源。
答案 1 :(得分:2)
您可以将您的AccountManager AM作为参数传递到您的登录表单,例如
loginForm.Show(AM);
并且在loginForm中应该有类似的内容:
AccountManager accountManager = null;
public DialogResult ShowDialog(AccountManager am)
{
accountManager = am;
return this.ShowDialog();
}
答案 2 :(得分: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;
}
}
答案 3 :(得分:0)
我使用以下方法解决了它:
在我的mainForm
上,我发起了AccountManager
:
public static AccountManager AM = new AccountManager();
然后,在我需要访问AccountManager
的每个表单上,我使用以下代码:
AccountManager AM = mainForm.AM;
MessageBox.Show(AM.username);
答案 4 :(得分:-1)
您可以将变量发送到constructor
的{{1}},如下所示:
在AccountManager
:
Main
在AccountManager AM = new AccountManager(Username, Password);
:
AccountManager
或者您可以将public AccountManager(string username, string password)
{
}
设为静态AccountManager
: