C# 如何宣告讓多個 Form 都能看到的 GLOBAL 變數 |
答題得分者是:shunchia63
|
digitraveler
初階會員 發表:89 回覆:91 積分:46 註冊:2005-06-01 發送簡訊給我 |
|
shunchia63
高階會員 發表:26 回覆:141 積分:198 註冊:2007-05-22 發送簡訊給我 |
|
digitraveler
初階會員 發表:89 回覆:91 積分:46 註冊:2005-06-01 發送簡訊給我 |
===================引 用 shunchia63 文 章=================== static? 大郭是說 Form1 中宣告 static int g , 而在 Form2 中宣告 static int g; , Form3 中也宣告 static int g; 大家就可以讀到同一郭 g 變數 ? |
shunchia63
高階會員 發表:26 回覆:141 積分:198 註冊:2007-05-22 發送簡訊給我 |
<textarea class="c#" rows="10" cols="60" name="code"> test1.cs
testStatic.i = 10;
testStatic.i = 20;
test2.cs
My.MyFunction.ShowMessage(testStatic.i.ToString()); <--i =20 testStatic.cs using System;
using System.Collections.Generic;
using System.Text; namespace WindowsApplication1
{
class testStatic
{
public static int i=0;
}
}
</textarea> 覺得你應該先買本物件導項的書,不然會很困惑
|
fPhoenix
一般會員 發表:0 回覆:20 積分:19 註冊:2005-08-11 發送簡訊給我 |
|
digitraveler
初階會員 發表:89 回覆:91 積分:46 註冊:2005-06-01 發送簡訊給我 |
===================引 用 fPhoenix 文 章=================== .NET沒有全域變數這種東西,所以替代的方法可以使用static成員,不過這樣的共用變數方式不是很好,應該考慮其他的替代方法。 小弟公司開發的軟體業別需要在隨時隨地知道一組狀態,然後決定當下的程式流程,這一組狀態就把它放在global 變數中,在程式的任何地方任何Form 都要隨時能調出這組 global 狀態值,所以才有 global 變數的需求 , 至於這樣的使用法到底好不好,由於小弟剛接觸 C#,實在想不出別種調用 GLOBAL 的方法 , 還望前輩指導 , 3Q |
fPhoenix
一般會員 發表:0 回覆:20 積分:19 註冊:2005-08-11 發送簡訊給我 |
|
digitraveler
初階會員 發表:89 回覆:91 積分:46 註冊:2005-06-01 發送簡訊給我 |
===================引 用 fPhoenix 文 章=================== 這種需求使用singleton模式吧,用簡單的就行了, 以下的做法需要使用C# 2.0 1. 建立一個靜態類別。 2. 建立靜態建構子,初始化所需要的靜態成員。 3. 提供存取方法。 4. 在各執行個體以類別名稱叫用。 如果有資源搶奪的問題再繼續複雜化模型。 想請問大哥,這類的方法我常看到 不過我的 global 有兩百個左右 放在類別中, 一個初始化程序再加上兩個存取方法程序 200個 global , 大約需要 600 個程序 我真的不知道這種作法好在哪裡 , 又安全在哪裡 ? 只覺得畫蛇添足 class g { //var1 變數用這種方法建立 (我覺得是畫蛇添足法) private static string tmpvar = ""; public static string var1 { get { return tmpvar; } set { tmpvar = value; } } //var2 變數用這種方法建立 public static string var2; } //使用時沒覺得兩種方法建立的變數用起來有啥差別 private void button1_Click(object sender, System.EventArgs e) { var_init(); //我習慣在 FormLoad 時用一個 var_init() 函式來 init 所有 global 後再使用 g.var1="123"; g.var2="456"; ....... ....... } //我習慣用一個 var_init() 函式來 init 所有變數 private void var_init(); { g.var1=""; g.var2=""; ....... ....... ....... } |
fPhoenix
一般會員 發表:0 回覆:20 積分:19 註冊:2005-08-11 發送簡訊給我 |
|
digitraveler
初階會員 發表:89 回覆:91 積分:46 註冊:2005-06-01 發送簡訊給我 |
===================引 用 fPhoenix 文 章=================== 使用前先呼叫var_init()?那不就變成每次使用前都會先重置變數,這樣的話,是不是考慮將其變為區域變數會比較好。 全域變數兩百個的話,建立的靜態成員也可以是兩百個,只要你使用公開的欄位即可。 可是我不想多寫那 200 個 get {} set {} ..... 還有 , 我還要幫這 200 個全域變數 建立 200 個內部變數 (給 get{}... set{} 使用) 想到就好累 , 前提是前述的 var2 的建立方法既然可用 , 那為何要用那畫蛇添足的 var1 建立方法 ?? (真的不懂) init_var() 只放在 Form_Load 用一次 , 是我例子舉的不好 另外我沒詳述的是有些變數的初始值並不是 null 或 0 有可能是從 INI 檔中取出 (這如何寫在類別中??) 所以根據我的經驗法則 , 我把所有 GLOBAL 初始方法放在一個類似 var_init() 的自寫函式中 我可以完全掌控 GLOBAL 的初始值 , 有些變數 init 後是 null 或 0 , 有些則是從 INI 檔重抓 (像是交易序號 , 掛號號碼等等) |
fPhoenix
一般會員 發表:0 回覆:20 積分:19 註冊:2005-08-11 發送簡訊給我 |
|
digitraveler
初階會員 發表:89 回覆:91 積分:46 註冊:2005-06-01 發送簡訊給我 |
===================引 用 fPhoenix 文 章=================== <textarea class="c#" rows="10" cols="60" name="code">public static Global { ????public static 成員型別 Member; ????public static 成員型別 Member2; ????static Global() ????{ ????????// 初始化的程式碼 ????} } </textarea> 使用的時候,直接var = Global.Member;或者是Global.Member = var; 這樣0.0 感謝大哥 可是....這樣不就是我原先說的 var2 的宣告方法 (不用一堆 get ..set) ?? 另外,我還是習慣將初始化寫在外部 function 中 不喜歡寫在 class 內部 |
fPhoenix
一般會員 發表:0 回覆:20 積分:19 註冊:2005-08-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |