2013-07-26 79 views
0

因此,在Class2之前調用Class 1。類1中的Sfile包含文本,並驗證了這一點。在class2中使用它時,它是空的。我知道我錯過了什麼,只是不記得是什麼。謝謝!來自不同類別的靜態變量調用

public static Class1{ 
    public static StreamWriter Sfile; 

internal static void Function1(){ 
     StreamWriter Sfile = new StreamWriter(str1, true); 
     Sfile.Write(Text) 
     } 
    } 

public partial class Class2{ 

private void Function2(){ 
     StreamWriter PrintField=Class1.Sfile; 
     //Sfile is null;   
     } 
    } 
+0

請添加標籤以表明語言。 – arshajii

+0

您還沒有在class1中初始化'sfile'。 –

+0

也許只是在內部函數'Sfile = new StreamWriter(str1,true);'中使用這個!否則,你正在聲明一個局部變量! – NINCOMPOOP

回答

2

的問題是,Function1聲明一個本地變量稱爲Sfile,隱藏靜態字段。所以你給了本地變量一個非空值,但不是靜態字段。

變化Function1這樣的:

internal static void Function1() 
{ 
    Sfile = new StreamWriter(str1, true); 
    Sfile.Write(Text); 
} 

...現在你不會得到同樣的問題。由於其他原因,它仍然是可怕的代碼,但至少Sfile不會爲空。

+0

「由於其他原因,這仍然是可怕的代碼」 - 您能否在答案中包含這些原因?也許來自'Class1'的代碼是從其他位置調用的,並且它是靜態的,這實際上有其用途? – aevitas

+0

@aevitas:列舉的理由太多了,說實話 - 他們會使實際問題變得渺茫,我現在也沒有時間。 –

相關問題