C# 我们能否创建一个全局变量,其值可以在应用程序中的任何位置访问?

C# 我们能否创建一个全局变量,其值可以在应用程序中的任何位置访问?,c#,class-library,C#,Class Library,我有一个类库项目,我想创建一个变量并通过MethodA()为其赋值,该变量的值可以通过MethodB()访问 就像我们在ASP.NET中有一个会话一样 我无法将其作为参数传递给MethodB(),因为MethodB()正在许多地方使用,如果我更改它,所有其他方法都会受到影响 Public Void MethodA() { string value ="Hello"; } public Void MethodB() { -- I want to read the value

我有一个类库项目,我想创建一个变量并通过
MethodA()
为其赋值,该变量的值可以通过
MethodB()
访问
就像我们在
ASP.NET
中有一个会话一样

我无法将其作为参数传递给
MethodB()
,因为
MethodB()
正在许多地方使用,如果我更改它,所有其他方法都会受到影响

Public Void MethodA()
{
string value ="Hello";
}

public Void MethodB()
{
-- I want to read the value which is set in MethodA()
}
MethodB()
中读取值后,我还需要处理该值


这两种方法都在同一项目中的不同类中。

首先尝试使用专用setter创建属性:

public class A
{
    public string Value { get { return MethodA();  } }

    public string MethodA()
    {
        return "Hello";
    }

    public void MethodB()
    {
        var value = Value;
    }
}
如果您有两门课:

public class A
{
    public string FooMethod()
    {
        return string.Empty;
    }
}


public class B
{
    public string BarMethod()
    {
        var result = new A().FooMethod();
        return result;
    }
}

首先尝试使用专用setter创建属性:

public class A
{
    public string Value { get { return MethodA();  } }

    public string MethodA()
    {
        return "Hello";
    }

    public void MethodB()
    {
        var value = Value;
    }
}
如果您有两门课:

public class A
{
    public string FooMethod()
    {
        return string.Empty;
    }
}


public class B
{
    public string BarMethod()
    {
        var result = new A().FooMethod();
        return result;
    }
}

您可以获得处理异常的想法

 public class test
{
    public static int value = 0; //Global variable
    public void MethodA()
    {
    //you can assign here as well
        value++;
    }
}

  public class HomeController : Controller
{
    test t = new test();
    public IActionResult Index()
    {
         t.MethodA();
        int d = test.value;
        //you can assign here as well
        test.value = 100;
        int dd = test.value;
        return View();
    }
   }

您可以获得处理异常的想法

 public class test
{
    public static int value = 0; //Global variable
    public void MethodA()
    {
    //you can assign here as well
        value++;
    }
}

  public class HomeController : Controller
{
    test t = new test();
    public IActionResult Index()
    {
         t.MethodA();
        int d = test.value;
        //you can assign here as well
        test.value = 100;
        int dd = test.value;
        return View();
    }
   }


如果
MethodA
MethodB
在同一类中,请不要将变量的作用域设置为该方法,而是使用private field抱歉,忘了提及,它们在
internal
中的同一项目make中是不同的类,然后。如果您真的希望它在任何地方(甚至在程序集之外)都可用,请将其设置为
public
阅读有关变量作用域的内容,例如:如果
MethodA
MethodB
在同一个类中,请不要将变量的作用域设置为该方法,而是使用private-field,抱歉忘了提及,它们是同一项目中的不同类,然后在
internal
中生成。如果您真的希望它在任何地方(甚至在程序集之外)都可用,请将其公开阅读变量范围,例如:这里:这种方法(以及更普遍的全局变量)的问题是,
MethodB
现在可能在初始化它之前使用
Value
。理想情况下,
Value
的getter应该在第一次调用时调用
MethodA
。更好的做法是通常避免全局访问模式,而是使用参数constructor@KonradRudolph谢谢你的建议!我已经更新了我的答案。谢谢您可能可以使用静态属性。这将是全局的,即使您创建了多个对象,它也具有相同的值。@zach my value将不断变化这种方法(以及更普遍的全局变量)的问题是
MethodB
现在可能在初始化之前使用
value
。理想情况下,
Value
的getter应该在第一次调用时调用
MethodA
。更好的做法是通常避免全局访问模式,而是使用参数constructor@KonradRudolph谢谢你的建议!我已经更新了我的答案。谢谢您可能可以使用静态属性。这将是全局的,即使您创建了多个对象,也具有相同的值。@zach my value将不断更改