gpt4 book ai didi

c# - 当前用户全局变量 C# 桌面应用程序

转载 作者:太空狗 更新时间:2023-10-29 23:14:57 29 4
gpt4 key购买 nike

我知道您可以在 Web 应用程序中使用 session 变量,但我不知道如何在桌面(Windows 窗体而不是移动 Android)中使用 session 变量。

我有一个 Player 类,用于将玩家与 app/SQLDb 中的其他类相关联(他们可能是也可能不是事件用户)。但我想设置一个 CurrentPlayer(实际运行应用程序的人)。

在启动时的 Program 类中,我正在运行检查以查看当前用户是否存在,如果不存在,则将它们添加到 SQLdb。但那时我想为我刚刚添加的用户设置一个应用程序范围的对象。事实上,如果他们不在数据库中,他们就无法运行该应用程序。

显然 static 不起作用,因为我不想让 Player 类一直保持静态。但我确实需要设置此对象并轻松获取信息。编辑:它不能一直是静态的原因是在除当前用户之外的所有其他实例中,我绝对希望创建一个播放器对象。我想这就像旧海军陆战队的事情。有很多球员,但这个是我的。

是的,我知道,全局变量通常不是很好,但在这里它是有道理的(好吧,我想是的,如果你们有其他想法,我洗耳恭听),我只是不知道如何实现它.

编辑:我在这里可能不清楚。我想我可能需要一个单例?但我不知道在哪个文件中声明实例或如何声明实例。

我有一个 MYAPPPlayer 类,通常用于许多实例,它可以/不应该是静态的(除非我想成为一个蹩脚的开发者)。但是我需要一个 MYAPPPlayer 全局单例对象变量,用于非 Web 桌面 csharp 应用程序的当前用户。

最佳答案

在您的应用程序中,您应该有一个static User CurrentUser 属性。

当您登录应用程序时,将当前用户设置为该用户的实例。

如果您使用的是 WPF,我会将其设为依赖属性,并将应用程序界面的其余部分绑定(bind)到该属性。如果您使用表单,则必须在用户更改时手动处理所有 UI 的更新。

编辑:关于如何使用静态运行程序和对象的静态实例来实现类似内容的简短示例。我还建议您阅读更多有关静态的含义以及类是什么的信息,它可能比您想象的要多一些……我会在底部解释更多

class Program
{
static Player CurrentUser;

static void Main(string[] args)
{
string username;
bool isValidUser;

//get and validate user credentials

if (isValidUser)
CurrentUser = new Player(username);

SomeMethod();
}

static void SomeMethod()
{
if (CurrentUser == null)
return;

//do stuff with user
}
}

public class Player
{
public string Name { get; private set; }
//... more properties

public Player(string name)
{
Name = name;
//... more properties
}
}

考虑静态与非静态......非静态类是您可以构造并具有多个实例的对象的蓝图。当类中有静态成员时,就会创建静态类。所有静态成员都被分离出来,只要您引用其中一个静态成员,就会在整个程序中声明和引用该静态类的单个实例……我所说的一个更好的例子是……

class Program
{
static Person John;

static void Main()
{
Console.WriteLine("Persons who exist {0}", Person.Total);

John = new Person("John");
John.Born();
John.Birthday();

Person Jane = new Person("Jane");
Jane.Born();

Console.WriteLine("Persons who exist {0}", Person.Total);
Console.WriteLine("John's Age {0}", John.Age);
Console.WriteLine("Jane's Age {0}", Jane.Age);

Console.ReadKey(true); //Pause program
}
}

class Person
{
public static int Total { get; private set; }

public static Person()
{
Total = 0;
}

public string Name {get; private set;}
public int Age { get; private set; }

public Person(string name)
{
Name = name;
Age = 0;
}

public void Born()
{
Total++;
}

public void Birthday()
{
Age++;
}

public void Death()
{
Total--;
}
}

正如您在上面所看到的,我有一个可以访问 John Person 的静态 main 方法。 Person 类是非静态的,但它确实有一个静态成员。请注意,Person 的实例在内部可以访问静态变量,但是您必须从 main 方法中调用 Person.Total 才能获得总数。另请注意,Person 类的静态部分无法访问 Person 的任何实例,但 Person 的所有实例都可以访问 Person 的静态成员,这就是当一个人是出生,或在死亡时迭代。

关于c# - 当前用户全局变量 C# 桌面应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22770074/

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