2016-07-28 55 views
3

我需要在我的.net项目中使用全局变量。但是,我不能处理这两种方法之间..如何在C#中创建一个全局变量?

我的代码:

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); 
} 

因此,我需要在全球范围内创建它!

+0

_Therefore,我需要在全球创建它_ - 见我的第二个和第三个代码段为 –

回答

10

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

最靠近Global的是它在一个类是static,并有一个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; 
    } 
} 
+0

.....我不会考虑使用showString(str),因为这个变量使用了很多方法.. –

+0

这个类中的所有方法都是?例如,如果检查编辑 –

+0

例如,我的点击事件将使用'str'做事情.. –

2

在C#中没有全局变量的概念。

你可以有静态成员这样

public static class MyClassWithStatics 
{ 
    public static string MyString {get;set;} 
} 

然后,在另一个类,你可以参考它:

public class MyOtherClass 
{ 
    public void MyMethod() 
    { 
     var str = MyClassWithStatics.MyString; 
    } 
} 
3

正如人们所说的,不要做全局变量。而是将一个参数传递给该方法。

它弄得有一点更加明显发生了什么事!

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

void showString(string nowthis) // nowthis == str, value is copied in 
{ 
    aspLabel.Text = nowthis; 
} 
相关问题