装饰器模式 Multiple Inheritance
装饰器模式 Multiple Inheritance多重继承
鸟 会飞
蜥蜴 会爬行
龙 能飞也能爬行
C# 不支持多继承,单可以多实现、所以我们这样做
public interface IBrid { void Fly(); } public class Brid: IBrid { public void Fly() { Console.WriteLine($"I Can Fly "); } } public interface ILizardz { public int Weight { get; set; } public void Crawl(); } public class Lizardz: ILizardz { public void Crawl() { Console.WriteLine($"I Can Crawl "); } } class Dragon : IBrid, ILizardz { private IBrid brid; private ILizardz lizardz; public Dragon() { this.brid = new Brid(); this.lizardz = new Lizardz(); } public void Crawl() { lizardz.Crawl(); } public void Fly() { brid.Fly(); } } class Program { static void Main(string[] args) { Dragon dragon = new Dragon(); dragon.Fly(); dragon.Crawl(); } }
现在需要给每种动物都增加一个重量属性:
public interface IBrid { public int Weight { get; set; } void Fly(); } public class Brid: IBrid { public int Weight { get ; set ; } public void Fly() { Console.WriteLine($"I Can Fly and Weight {Weight}"); } } public interface ILizardz { public int Weight { get; set; } public void Crawl(); } public class Lizardz: ILizardz { public int Weight { get; set; } public void Crawl() { Console.WriteLine($"I Can Crawl and Weight {Weight}"); } } class Dragon : IBrid, ILizardz { private IBrid brid; private ILizardz lizardz; public Dragon() { this.brid = new Brid(); this.lizardz = new Lizardz(); } private int weight; public int Weight { get { return weight; } set { weight = value; brid.Weight = Weight; lizardz.Weight = Weight; } } public void Crawl() { lizardz.Crawl(); } public void Fly() { brid.Fly(); } // public int Weight { get; set; } Error!!!! } class Program { static void Main(string[] args) { Dragon dragon = new Dragon(); dragon.Weight = 123; dragon.Fly(); dragon.Crawl(); } }