2

別のクラスからファイルに書き込むにはどうすればよいですか?

public class gen
{
   public static string id;
   public static string m_graph_file;
}

static void Main(string[] args)
{
  gen.id = args[1]; 
  gen.m_graph_file = @"msgrate_graph_" + gen.id + ".txt";
  StreamWriter mgraph = new StreamWriter(gen.m_graph_file);
  process();
}

public static void process()
{
  <I need to write to mgraph here>
}
4

3 に答える 3

4

StreamWritermgraphprocess()メソッドに渡します

static void Main(string[] args)
{
  // The id and m_graph_file fields are static. 
  // No need to instantiate an object 
  gen.id = args[1]; 
  gen.m_graph_file = @"msgrate_graph_" + gen.id + ".txt";
  StreamWriter mgraph = new StreamWriter(gen.m_graph_file);
  process(mgraph);
}

public static void process(StreamWriter sw)
{
 // use sw 
}

ただし、コードには理解しにくい点がいくつかあります。

  • gen2 つの静的変数を使用してクラスを宣言します。これらの変数は、gen のすべてのインスタンス間で共有されます。これが望ましい目的であれば問題ありませんが、私は少し当惑しています。
  • メイン メソッドで StreamWriter を開きます。静的な m_grph_file を考えると、これは実際には必要ではなく、コードで例外が発生した場合のクリーンアップが複雑になります。

たとえば、gen クラス (または別のクラス) では、ファイル名がクラス gen で静的であるため、同じファイルで動作するメソッドを作成できます。

public static void process2()
{
    using(StreamWriter sw = new StreamWriter(gen.m_graph_file)) 
    { 
        // write your data .....
        // flush
        // no need to close/dispose inside a using statement.
    } 
}
于 2012-06-11T21:48:05.607 に答える
2

StreamWriterオブジェクトをパラメーターとして渡すことができます。または、プロセスメソッド内に新しいインスタンスを作成することもできます。また、StreamWriterをusing:内にラップすることをお勧めします。

public static void process(StreamWriter swObj)
{
  using (swObj)) {
      // Your statements
  }
}
于 2012-06-11T21:58:39.753 に答える
1

もちろん、次のような「プロセス」メソッドを使用することもできます。

public static void process() 
{
  // possible because of public class with static public members
  using(StreamWriter mgraph = new StreamWriter(gen.m_graph_file))
  {
     // do your processing...
  }
}

しかし、設計の観点からは、これはより理にかなっています(編集:完全なコード):

public class Gen 
{ 
   // you could have private members here and these properties to wrap them
   public string Id { get; set; } 
   public string GraphFile { get; set; } 
} 

public static void process(Gen gen) 
{
   // possible because of public class with static public members
   using(StreamWriter mgraph = new StreamWriter(gen.GraphFile))
   {
     sw.WriteLine(gen.Id);
   }
}

static void Main(string[] args) 
{ 
  Gen gen = new Gen();
  gen.Id = args[1];  
  gen.GraphFile = @"msgrate_graph_" + gen.Id + ".txt"; 
  process(gen); 
}
于 2012-06-11T21:56:46.537 に答える