创建全局对象?

我正在努力实现以下目标:

当用户成功通过身份validation后,我需要创建一个全局用户对象,我可以从不同的表单(或类)访问该对象。

我正在查看VS中可用的数据源,并看到有一个“对象”选项,可能适合我想要实现的目标。 麻烦的是,我不知道它是如何工作的。

谁能指出我正确的方向?

谢谢。

假设这是一个Windows窗体应用程序,您可以创建一个存储在静态ApplicationState类中的User类。

脚步:

1)创建用户类以保存有关用户的信息:

public class User { public string Login { get; set; } //.. other properties } 

2)创建ApplicationState类:

 public static class ApplicationState { public static User CurrentUser { get; set; } } 

3)在登录过程中,创建用户类的新版本并将其分配给ApplicationState.CurrentUser属性:

  public void CompleteLogin(string sLogin) { User user = new User(); user.Login = sLogin; ApplicationState.CurrentUser = user; } 

4)您现在可以在项目的任何位置使用ApplicationState.CurrentUser

它被称为Singleton ,它是一件坏事(特别是当它的状态可以变异时)。 调查dependency injection (DI)。 甚至还有一本特定于.NET的书 。

根据请求,这是一个简单的(可能是过于简化的)手动执行DI的示例。 DI容器库 (也称为控制反转或IoC容器库)可以简化组合根中“连接所有内容”的过程,并且通常还提供生命周期管理和其他function。

 // Composition root of your application void Main() { // Only instance of user we will ever create var user = new User(); var instance = new MyClass(user); } public interface IUser { string Name { get; set; } } public class User: IUser { public string Name { get; set; } } public class MyClass { public MyClass(IUser user) { if (user == null) { throw new ArgumentNullException("user"); } _user = user; } private readonly IUser _user; } 

您可以使用或创建一个公共列表,确保只有在经过validation后才能将经过身份validation的用户添加到列表中,您甚至可以通过封装字段访问,创建List或string []属性来执行此操作。想要创建一个类级别的属性。