C# 在OOP中使用静态变量的正确方法是什么?
我正在研究员工管理系统。每个员工都属于一个部门,当员工登录到系统时,我将UserId和DepartmentId存储在我的类中,如下所示C# 在OOP中使用静态变量的正确方法是什么?,c#,oop,C#,Oop,我正在研究员工管理系统。每个员工都属于一个部门,当员工登录到系统时,我将UserId和DepartmentId存储在我的类中,如下所示 internal static class MyStaticData { internal static Guid UserId { get; set; } internal static Guid DepartmentId { get; set; } } 当用户转到创建请假应用程序页面并点击保存按钮时,我需要发送UserId和Departme
internal static class MyStaticData
{
internal static Guid UserId { get; set; }
internal static Guid DepartmentId { get; set; }
}
当用户转到创建请假应用程序页面并点击保存按钮时,我需要发送UserId和DepartmentId以存储在数据库中,那么在这两个页面之间发送UserId和DepartmentId的正确方式是什么呢
// Create instance property inside the class and assign it when create new object.
public class LeavePage
{
public Guid UserId { get; set; }
public Guid DepartmentId { get; set; }
}
var leavePage = new LeavePage { UserId = MyStaticData.UserId, DepartmentId = MyStaticData.DepartmentId };
或
我不确定哪一个更好,耦合更少,或者它是否有更好的方法来实现这一点?如果不需要在类中包含值的实例,请不要这样做。您可能希望尝试使用某个更通用类的静态实例-类似于以下内容:
public class User
{
public Guid Id { get; set; }
public Guid DepartmentId { get; set; }
}
public static class SessionContext
{
public static User CurrentUser { get; set; }
}
然后在保存时使用SessionContext.CurrentUser
当然,在这种情况下,使用静态类可能是不合适的,您应该查看特定于会话的实例。您谈论的是离开页面。您正在开发web应用程序吗?那么静态用户数据是个坏主意。您是否混淆了静态对象类成员和常量实例成员?静态成员在类的所有实例之间共享。您可能希望对UserId和DepartmentId使用私有常量,因为它们在用户之间是可变的。@DanielB:这是窗口应用程序。@DanielB:为什么静态用户数据不好?@Akram Shahda:在web应用程序中,asp.net静态变量在应用程序之间共享,没有请求范围,因此,每个用户都将使用自己的数据覆盖其他用户的静态变量。
public class User
{
public Guid Id { get; set; }
public Guid DepartmentId { get; set; }
}
public static class SessionContext
{
public static User CurrentUser { get; set; }
}