c# - 如何在 C# 中创建全局变量?

标签 c# asp.net .net

我需要在我的 .net 项目中使用一个全局变量。但是,我无法在两种方法之间处理它..

我的代码:

string str;
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        str = "i am a string";
        showString();
    }
}

void showString()
{
    aspLabel.Text = str; //error
}

问题更新:

我不会考虑使用showString(str),因为这个变量被很多方法使用。例如,我有一个需要使用它的点击事件。

protected void Btn_Click(object sender, EventArgs e)
{
    exportToExcel(str);
}

因此,我需要在全局创建它!

最佳答案

答案是不要做全局变量(你也不能)。

最接近 Global 的是将它放在一个 static 类中并且有一个 static 成员 - 但我真的认为它会是大多数情况下的错误方法。 静态 类/成员通常会使代码更加耦合并降低可测试性,因此在您决定这样做时请谨慎选择。

改为:(传递参数)

protected void Page_Load(object sender, EventArgs e)
{
  if (!Page.IsPostBack)
  {
    string str = "i am a string";
    showString(str);
  }
}

void showString(string str)
{
  aspLabel.Text = str;
}

或者:

public class SomeClass
{
    private string str;

    protected void Page_Load(object sender, EventArgs e)
    {
      if (!Page.IsPostBack)
      {
        str = "i am a string";
        showString();
      }
    }

    protected void Btn_Click(object sender, EventArgs e)
    {
       exportToExcel(str);
    }

    void showString()
    {
      aspLabel.Text = str;
    }
}

在这里您可以根据需要将 str 更改为属性或不同的访问修饰符,但这是一般的想法。

如果您将它设为公共(public)而不是私有(private),您将能够从持有此类实例的不同类访问它。像这样:

public class SomeClass
{
    public string Str { get; private set; }

    protected void Page_Load(object sender, EventArgs e)
    {
      if (!Page.IsPostBack)
      {
        Str = "i am a string";
        showString();
      }
    }

    protected void Btn_Click(object sender, EventArgs e)
    {
       exportToExcel(Str);
    }

    void showString()
    {
      aspLabel.Text = Str;
    }
}

public class SomeOtherClass
{
    public SomeOtherClass()
    {
        SomeClass someClass = new SomeClass();
        var otherStr = someClass.Str;
    }
}

关于c# - 如何在 C# 中创建全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38631951/

相关文章:

c# - 我应该考虑在 WCF 双工服务上使用 SignalR 吗?

c# - 如何更改双数组中的项目?

asp.net - asp.net中usercontrol的优缺点

c# - 为什么将值存储在变量中会改变相等比较的结果?

c# - 从循环外跳入循环内的标签不是非法的C#代码吗?

.net - 模型上的 mvc4 条件数据注释验证

c# - 顺时针排序列表中的 2d 个点

c# - OLEDB 中的 IN 运算符

c# - ASP.NET 5 beta 8 中的 Windows 身份验证支持

c# - 如何在Javascript中处理ObjectId,无法解析它