我需要在我的 .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/