2016-07-28 107 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; 
} 
相關問題