C# 在OOP中使用静态变量的正确方法是什么?

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

我正在研究员工管理系统。每个员工都属于一个部门,当员工登录到系统时,我将UserId和DepartmentId存储在我的类中,如下所示

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; }
}