2011-03-12 74 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