namespace delegatescs
{
using system;
public class wisdom //包含代理的类
{
public delegate string giveadvice();
public string offeradvice(giveadvice words)
{
return words();
}
}
public class parent //基类
{
public virtual string advice()
{
return("listen to reason");
}
~parent() {}
}
public class dad: parent //子类
{
public dad() {}
public override string advice()
{
return("listen to your mom");
}
~dad() {}
}
public class mom: parent //子类
{
public mom() {}
public override string advice()
{
return("listen to your dad");
}
~mom() {}
}
public class daughter //不继承与基类的类
{
public daughter() {}
public string advice()
{
return("i know all there is to life");
}
~daughter() {}
}
public class test
{
public static string calladvice(parent p)//使用基类
{
wisdom parents = new wisdom();
wisdom.giveadvice teenagegirls = new wisdom.giveadvice(p.advice);//将advice方法委托给teenagegirls委托对象
return(parents.offeradvice(teenagegirls));
}
public static void main()
{
dad d = new dad();
mom m = new mom();
daughter g = new daughter();
//以下两个为衍于基类的类
console.writeline(calladvice(d));
console.writeline(calladvice(m));
//以下为未衍于基类的类,如果调用将出错。
//console.writeline(calladvice(g));
}
}
}
