2005年C#の旅その6

今回はPartial Classについて・・・なんですが、ちょっとしたネタを思いついたので、それを。まずは、サンプルから。

#region Using directives

using System;
using System.IO;
using System.Collections.Generic;
using System.Text;

#endregion

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length != 2)
            {
                Console.WriteLine("usage Program classname count");
                return;
            }

            string format = "partial class {0} {{\r\n\t {1} \r\n}}";

            StreamWriter sw;
            using (sw = new StreamWriter(File.Create(args[0] + ".cs")))
            {
                sw.WriteLine(format, args[0], "static void Main() {}");
            }

            for (int i = 0; i < int.Parse(args[1]); ++i) {
                using (sw = new StreamWriter(File.Create(args[0] + i.ToString() + ".cs")))
                {
                    string s = String.Format("void Method{0}() {{}}", i);
                    sw.WriteLine(format, args[0], s);
                }
           }
        }
    }
}

どこが、Partial Classかと言いますと、コイツをビルドして、

$ program.exe MyClass 1000

と、実行するとエントリーポイントを持ったMyClass.csとメソッドと分割されたクラスを含むMyClass0.cs〜MyClass999.csが生成されます。こいつらをまとめてコンパイルすると、ちゃんと1つのMyClassになりました。

ひゃっほー・・・ま、まぁ、息抜きということで。(^^;;;

あと、1000個のソースをプロジェクトにつっこんだところ、かなり重たくなり、応答が無くなったので強制終了させることになってしまいました。真似しない方がいいですよー<誰もしないよ。

Partial Classの真面目な話はこちらをご覧になった方がいいです。