【问题标题】:Access same object value in another location在另一个位置访问相同的对象值
【发布时间】:2016-08-13 04:44:02
【问题描述】:

我有一个简单的 C# 登录系统(Winform 应用程序)。我有一个单独的类 (ActiveUser) 来存储用户登录时的详细信息。

ActiveUser 类中,我有一个名为loggedInUserID 的变量。

因此,当用户登录时,在登录表单上,我为该变量设置了一个值。

ActiveUser obj = new ActiveUser();
obj.setLoggedUserID(UserID);

现在我在每个表单中都有一个CheckLoggedIn() 方法来检查用户是否登录。所以,我可以阻止用户访问未经授权的页面。

那么,如何检查呢?如果我确实喜欢这个,那只是另一个对象。

CheckLoggedIn(){

    ActiveUser obj = new ActiveUser();

    if(obj.getLoggedUserID() != 0){
        MessageBox.Show("Logged In");
    }
}

那么,如何查看我在用户登录时创建的对象值呢?

【问题讨论】:

    标签: c# visual-studio object-oriented-analysis


    【解决方案1】:

    我认为单例模式最适合这种情况。

    ActiveUser 成为一个简单的单例类。

    ActiveUser 类中,添加如下内容:

    public static readonly ActiveUser User = new ActiveUser();
    

    SetLoggedUserID,就这样吧:

    ActiveUser.User.SetLoggedUser(...);
    

    你可以这样检查:

    void CheckLoggedIn(){
    
        if(ActiveUser.User.getLoggedUserID() != 0){
            MessageBox.Show("Logged In");
        }
    }
    

    为避免意外创建ActiveUser 的新实例,我建议您将构造函数设为私有:

    private ActiveUser() { ... }
    

    【讨论】:

    • 谢谢,但是如何将整数值设置为 User 变量?它说“不能隐式转换......”
    • @TharinduLucky 您似乎来自 js 背景。不幸的是,您不能将ActiveUser 实例以外的任何内容设置为User。 C# 主要使用静态类型。而且这里不适合使用dynamic关键字。你想做什么?我闻到了 XY 问题。
    • 是的,我知道一点 JS。我要做的是,在日志记录页面中,我需要将用户 ID 设置为 ActiveUser 类中的 User 变量。由于可以在程序中的任何位置访问该课程,因此我可以检查用户是否已登录
    • @TharinduLucky 我不知道你在说什么,但你可以像以前一样设置用户 ID:obj.setLoggedUserID(UserID);,除非你将 obj 更改为 ActiveUser.User。如果您显示的代码编译成功,那么ActiveUser.User.setLoggedUserID(UserID); 也应该如此
    • 您应该使用ActiveUser.User 而不是obj @TharinduLucky 如果您想以其他形式访问该值,请执行ActiveUser.User.getLoggedUserID()。你有没有看我的回答?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 2013-05-02
    相关资源
    最近更新 更多