第1回:http://blogs.wankuma.com/myugaru/archive/2008/03/04/126104.aspx
第2回:http://blogs.wankuma.com/myugaru/archive/2008/03/03/126036.aspx
そして今日で最終回(?)。
NyaRuRuさんのコメント:
なるほど.それであれば,コードの自動生成使いますかね.私なら.
今だと partial クラス / partial メソッドが使えるので,かなり生成用のコードも楽になっています.
以前書いたものですが,XSL を使って自動生成した C# コード.
http://vsug.jp/tabid/63/forumid/45/threadid/6234/scope/posts/Default.aspx
http://www.dwahan.net/nyaruru/hatena/codegentest.xml
↑右クリック→「ソースの表示」をやってみてください.
★コードをコードで生成(トランスレータ)というアイデアが素晴らしいです。
あれー何か最近こういう
話題の本を読んだような?w
私はまだまだこの領域へは到達できません。
かずきさんの回答:
http://blogs.wankuma.com/kazuki/archive/2008/03/05/126302.aspx
★これは上のNyaRuRuさんのやつの実践編ですね。ってかすぐ実践できちゃうって超人ですねえ。しかもRubyというのが超しびれます。
色々言語が使えてうらやましいです。(*´・ε・*)σ||
お二人ともありがとうございました。
最後に私が初日に考えた答えを出しておきます。
using System;
using System.Collections.Generic;
namespace Question1
{
class ParentA
{
public List<ChildA> Children = new List<ChildA>();
private static string whereStudy = "A家は塾に通う";
public void Add(ChildA child)
{
Children.Add(child);
}
public void Cooking()
{
Console.WriteLine("ParentA:Cooking()");
}
public class ChildA
{
public void Study()
{
Console.WriteLine("ChildA:Study():" + whereStudy);
}
}
}
class ParentB
{
public List<ChildB> Children = new List<ChildB>();
private static string whoTeach = "B家はパパが先生";
public void Add(ChildB child)
{
Children.Add(child);
}
public void Cooking()
{
Console.WriteLine("ParentB:Cooking()");
}
public class ChildB
{
public void Study()
{
Console.WriteLine("ChildB:Study():" + whoTeach);
}
}
}
}
namespace Answer1
{
class ParentT<T> where T : ParentT<T>.ChildT
{
public List<T> Children = new List<T>();
public void Add(T child)
{
Children.Add(child);
}
public virtual void Cooking()
{
Console.WriteLine("Cooking()");
}
public class ChildT
{
public virtual void Study()
{
}
}
}
class ParentA : ParentT<ParentA.ChildA>
{
private static string whereStudy = "A家は塾に通う";
public override void Cooking()
{
Console.Write("ParentA:");
base.Cooking();
}
public class ChildA : ParentA.ChildT
{
public override void Study()
{
Console.WriteLine("ChildA:Study():" + whereStudy);
}
}
}
class ParentB : ParentT<ParentB.ChildB>
{
private static string whoTeach = "B家はパパが先生";
public override void Cooking()
{
Console.Write("ParentB:");
base.Cooking();
}
public class ChildB : ParentB.ChildT
{
public override void Study()
{
Console.WriteLine("ChildB:Study():" + whoTeach);
}
}
}
}
namespace Console1
{
//using Question1;
using Answer1;
static class Program
{
[STAThread]
static void Main(string[] args)
{
Console.WriteLine("-- A --");
ParentA pa = new ParentA();
pa.Add(new ParentA.ChildA());
pa.Add(new ParentA.ChildA());
pa.Cooking();
foreach (ParentA.ChildA c in pa.Children)
c.Study();
Console.WriteLine("-- B --");
ParentB pb = new ParentB();
pb.Add(new ParentB.ChildB());
pb.Cooking();
foreach (ParentB.ChildB c in pb.Children)
c.Study();
Console.ReadLine();
}
}
}