ana*_*ias 5 c# variables desktop global
我知道您可以在Web应用程序中使用会话变量,但我不知道如何在台式机(Windows窗体而不是移动android)中使用会话变量。
我有一个Player类,该类用于将播放器与app / SQLDb中的其他类关联(它们可以是也可以不是活动用户)。但是我想设置一个CurrentPlayer(实际运行应用程序的人)。
在启动时的Program类中,我正在运行检查以查看当前用户是否存在,如果不存在,请将其添加到SQLdb。但是当时我想为刚添加的用户设置一个应用程序范围的对象。实际上,如果它们不在数据库中,则无法运行该应用程序。
显然静态是行不通的,因为我不想一直将Player类设为静态。但是我确实确实需要设置此对象和易于使用的信息。编辑:之所以不能一直保持静态是因为在其他所有实例中,但在当前用户之外,我绝对希望创建一个播放器对象。我想这就像海军陆战队的旧事。有很多玩家,但是这个是我的。
是的,我知道,全局变量通常不好,但是在这里是有道理的(我想是的,如果大家都有其他想法,我只是不知道),我只是想不出如何实现它。
编辑:我可能在这里不清楚。我想我可能需要单身人士吗?但我不知道在哪个文件中声明实例或如何声明。
我有一个MYAPPPlayer类,该类通常用于许多实例,它可以/不应该是静态的(除非我想成为一个笨拙的开发人员)。但是对于非Web桌面csharp应用程序的当前用户,我需要一个MYAPPPlayer全局单例对象变量。
在您的应用程序中,您应该有一个static User CurrentUser属性。
当您登录到应用程序时,将当前用户设置为该用户的实例。
如果您使用的是 WPF,我会将其设为依赖属性,并将应用程序接口的其余部分绑定到该属性。如果您使用表单,则必须在用户更改时手动处理所有 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
}
}
Run Code Online (Sandbox Code Playgroud)
考虑一下静态与非静态......非静态类是您可以构造并拥有多个实例的对象的蓝图。当类中有静态成员时,就会创建静态类。所有静态成员都被分离出来,并且每当您引用这些静态成员之一时,就会在整个程序中声明和引用该静态类的单个实例......我所说的一个更好的例子是......
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--;
}
}
Run Code Online (Sandbox Code Playgroud)
正如您在上面看到的,我有一个静态 main 方法,可以访问 John Person。Person 类是非静态的,但它确实有一个静态成员。请注意,Person 的实例在内部可以访问静态变量,但在 main 方法中,您必须说 Person.Total 才能获取总计。另请注意,Person 类的静态部分无法访问 Person 的任何实例,但 Person 的所有实例都可以访问 Person 的静态成员,这就是当一个人出生时,或死亡时向下迭代。