検索 K
とりあえず、ソフトウェア関連の記事を書くということらしいので、最近勉強中のC#のことでも。
C#には標準で、CodeDomなるソースジェネレーターがあるらしい。
コレ> http://msdn2.microsoft.com/ja-jp/library/system.codedom(VS.80).aspx
せっかくなので、ちょっと使ってみた。
ソース
using System.IO;
using System.CodeDom;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using Microsoft.VisualBasic;
class CodeDomTest
{
public static void Main()
{
CodeCompileUnit compileUnit = new CodeCompileUnit();
CodeNamespace tNameSpace = new CodeNamespace("TestNameSpace");
CodeTypeDeclaration tInterface = new CodeTypeDeclaration("TestInterface");
CodeTypeDeclaration tClass = new CodeTypeDeclaration("TestClass");
CodeMemberMethod tMethod = new CodeMemberMethod();
StreamWriter tCSWriter = new StreamWriter(".CodeDomTest.cs", false);
StreamWriter tVBWriter = new StreamWriter(".CodeDomTest.vb", false);
try
{
tMethod.Name = "TestMethod";
tInterface.IsInterface = true;
tClass.IsClass = true;
tClass.BaseTypes.Add(tInterface.Name);
tClass.Members.Add(tMethod);
tNameSpace.Types.Add(tInterface);
tNameSpace.Types.Add(tClass);
compileUnit.Namespaces.Add(tNameSpace);
CSharpCodeProvider tCSprovider = new CSharpCodeProvider();
VBCodeProvider tVBprovider = new VBCodeProvider();
tCSprovider.GenerateCodeFromCompileUnit(compileUnit, tCSWriter, new CodeGeneratorOptions());
tVBprovider.GenerateCodeFromCompileUnit(compileUnit, tVBWriter, new CodeGeneratorOptions());
}
finally
{
tCSWriter.Close();
tVBWriter.Close();
}
}
}C#出力結果(CodeDomTest.cs)
namespace TestNameSpace
{
public interface TestInterface
{
}
public class TestClass : TestInterface
{
private void TestMethod()
{
}
}
}VB出力結果(CodeDomTest.vb)
Option Strict Off
Option Explicit On
Namespace TestNameSpace
Public Interface TestInterface
End Interface
Public Class TestClass
Inherits TestInterface
Private Sub TestMethod()
End Sub
End Class
End Namespace1つの定義情報で、いろいろな言語が出力できるのは、なかなかおもしろいかも。 今回は、そんなとこで。
