gpt4 book ai didi

Winforms:在整个应用程序中访问类属性

转载 作者:行者123 更新时间:2023-12-01 11:09:49 24 4
gpt4 key购买 nike

我知道这一定是一个古老而令人厌烦的问题,但我似乎无法通过我可信赖的 friend (又名 Google)找到任何东西。

我有一个 .net 3.5 c# winforms 应用程序,它在应用程序启动时向用户显示一个登录表单。成功登录后,我想运行到数据库,提取一些特定于用户的数据并将它们(在属性中)保存在名为 AppCurrentUser.cs 的类中,此后可以跨所有访问程序集中的类——这里的目的是我可以用一次性数据读取来填充一些属性,而不是每次需要时都调用数据库。在 Web 应用程序中,我通常会使用 Session 变量,而且我知道 WinForms 中不存在这个概念。

类结构如下所示:

public class AppCurrentUser {

public AppCurrentUser() { }

public Guid UserName { get; set; }
public List<string> Roles { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
}

现在,我有一些选项需要专家的建议:

作为一个“愚蠢”的类,我应该使属性成为非静态的,实例化类然后设置属性......但是我将只能从创建它的类中访问该实例,对吧?

从逻辑上讲,我认为这些属性应该是静态的,因为我只会在整个应用程序中使用该类一次(并且不会创建它的新实例),并且它的属性值将在应用程序关闭时“重置”。 (如果我创建它的一个实例,我可以在应用程序关闭时处理它)

我应该如何构造我的类以及如何在程序集中的所有类中访问它的属性?我真的很感激你对此的诚实和宝贵的建议!!

谢谢!

最佳答案

这里使用单例模式:

public class AppUser
{
private static _current = null;
public static AppUser Current
{
get { return = _current; }
}

public static void Init()
{
if (_current == null)
{
_current = new AppUser();
// Load everything from the DB.
// Name = Dd.GetName();
}
}

public string Name { get; private set; }
}

// App startup.
AppUser.Init();

// Now any form / class / whatever can simply do:
var name = AppUser.Current.Name;

现在“静态”的东西是线程不安全的。我将把它留作读者的练习,以弄清楚如何正确使用 lock() 语法来使其线程安全。如果在调用 Init 之前访问 Current 属性,您还应该处理这种情况。

关于Winforms:在整个应用程序中访问类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1257677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com