public abstract class DogCmd { public abstract string GetCmd(); } public class SitDogCmd : DogCmd { public override string GetCmd() { return "sit"; } } public class JumpDogCmd : DogCmd { public override string GetCmd() { return "jump"; } } public interface IDogLearn<T> where T:DogCmd//泛型接口的定义,并且添加了约束,T限制为只能是DogCmd类及其派生类 { void Act(T cmd);//接口里的方法没有实体,也没有访问关键字 }
public class Corky:Dog,IDogLearn<SitDogCmd>,IDogLearn<JumpDogCmd>//接口的实现 { public Corky(string name) : base(name)/ { } public void Act(SitDogCmd cmd)//定义接口内的同名方法 { Console.WriteLine(cmd.GetCmd()); } public void Act(JumpDogCmd cmd) { Console.WriteLine(cmd.GetCmd()); } }
class Program { static void Main(string[] args) { Corky corky = new Corky("CK"); corky.Act(new SitDogCmd());//通过使用SitDogCmd类型参数调用了自己实现的IDogLearn接口里的方法Act
corky.Act(new JumpDogCmd());
}
}