asp.net 如何在其他方法中使用和更新全局变量

piah890a  于 2022-11-19  发布在  .NET
关注(0)|答案(2)|浏览(143)
public int userID;
//global variable 
        
        
        public Index()
        {
            userID = 10;
            return userID;
        }
        
        public TaskCompleted()
        {
            Console.WriteLine(Index())
        }

我希望在每个方法中都可以访问userID,并且可以在任何位置更新它

f4t66c6m

f4t66c6m1#

您的Index方法有两个问题。
1.语法问题:每个方法都必须有一个返回类型。可以是int这样的真实的类型,也可以是void关键字。

public int Index()

1.语义问题。在每次调用时,它都会设置userID并返回它。为什么要将值存储在这个变量中?它会在下次调用时被新值替换,可能只是一个局部变量(即方法内部的变量),也可能被完全忽略。但也许你的示例并不完整。
让我们尝试不同的方法:
1.通过类字段(您的“全局”变量)传递值。

private int _userId;

public void SetUserId() // `void` means that the method is not returning a value.
{
    _userId = 10;
}

public void PrintUserId()
{
    Console.WriteLine(_userId);
}

这要求您在调用PrintUserId();之前调用SetUserId();
1.让方法返回值。

public int GetUserId() // `int` means that the method is returning an `int` value
{
    return 10;
}

public void PrintUserId()
{
    Console.WriteLine(GetUserId());
}

1.合并前面两种方法

private int _userId;

public void SetUserId() 
{
    _userId = 10;
}

public int GetUserId()
{
    return _userId;
}

public void PrintUserId()
{
    Console.WriteLine(GetUserId());
}
  1. C#有一个称为“属性”的概念。属性是一组“Get”和“Set”方法,就像前面的例子一样,但具有特殊的语法。
private int _userId;
public UserId
{
   get { return _userId; }
   set { _userId = value; }
}

public void PrintUserId()
{
    Console.WriteLine(UserId);
}

除了赋值和返回值之外没有其他逻辑的属性也可以实现为自动属性。

public int UserId { get; set; }  // A hidden field is automatically created.

调用者必须做如下操作:

var obj = new MyClass();
obj.UserId = 10;
obj.PrintUserId();
14ifxucb

14ifxucb2#

您可以使用静态类别的静态属性:

public static class Globals
{
    public static int UserID {get; set;}
}

用法:var userId = Globals.UserID;

相关问题