2011-03-12 79 views
0

類對象可以在類級別的C#中聲明這樣的StreamWriter嗎?我有多個不需要訪問同一個StreamWriter的函數,但是因爲必須使用流的構造函數來啓動它,所以我不知道如何在函數之外聲明它。將對象聲明爲類成員

+0

StreamWriter只是一個幫助程序類,它知道如何將文本(而不是原始二進制文件)寫入流中。您可以在同一個流上創建多個作家。請記住,在StreamWriter上調用Dispose將關閉基礎流(StreamWriter.BaseStream),因此請確保流的生命週期管理在外部,並且不要處置作者。 – Tergiver 2011-03-12 17:44:56

+0

發佈一些示例代碼,顯示您正在嘗試執行的操作。那麼我們可以幫助你。 – 2011-03-12 22:00:56

回答

1

如果沒有多線程問題,您可以在類之外聲明它,並使用適當的流在函數內初始化它。

但是,根據需要在每個函數內部聲明和初始化流是一種很好的做法。

+0

我該怎麼做?當我在函數之外聲明它時,出現錯誤「非靜態字段,方法或屬性需要對象引用...」 – 2011-03-12 17:39:52

+0

如果我在單個函數中聲明瞭streamwriter,我將會擁有在函數之外聲明我的過程,以便我可以執行myStrmWriter = process.StandardInput;在每個功能中。我能看到的唯一選擇是全局存儲我的進程ID,然後對所有進程進行排序,找到實例等等。這看起來效率很低。 – 2011-03-12 17:42:13

0

你的意思是做這樣的事情?將它聲明爲你的類的成員,然後在你的構造函數中初始化它。

public class Foo 
{ 
    private StreamWriter writer; 

    public Foo() 
    { 
     writer = new StreamWriter(...); 
    } 
} 
+0

我這樣做,因爲你列出,並有作家=新的StreamWriter(minecraftProcess.StandardInput.BaseStream);在我的函數中,但仍然得到了編寫器所需的對象引用的錯誤。 – 2011-03-12 17:50:54

+0

然後,您需要發佈一個簡短但完整的示例來演示您的代碼問題。您在構造函數中指定它之前引用'writer'。我們所有人都只能正確回答足夠的信息。如果你像我在這裏那樣在構造函數中實例化'writer',那麼你不應該遇到問題。實際上,這回答了「我如何在課堂級別聲明StreamWriter」,這基本上就是你所要求的。 – Amy 2011-03-13 07:21:20