.NET 4.x Динамическое наследование интерфейсов - C#
Формулировка задачи:
В книге "Паттерны программирования" нашел интересную тему на Java про динамическое наследование интерфейсов. Попобовал реализовать это на C#, к сожалению не получилось. Вот код суперкласса на Java.
Имеется соответствующий интерфейс FlyBehavior очень простой. Естественно имеется класс, производный от интерфейса.
Далее код производного класса
На Java все это прекрасно компилируется и работает.
Теперь код на C#. Класс-родитель
Понятно, что имеются интерфейсы и классы, производные от интерфейсов, они простые и похожи на те, что в Java. Вот один
А вот производный класс, в котором и возникает ошибка уже на этапе компиляции
Ошибка такая "ClassDuck.Duck.flyBechavior" недоступен из-за его уровня защиты". Вопрос вот в чем, С# в принципе не может реализовать такое наследование, или я просто где-то туплю. Скажу сразу, мне удалось реализовать это поведение, но не так изящно, как в Java, а хотелось бы получить похожее поведение
public abstract class Duck { FlyBehavior flyBehavior; public Duck() {} public void performFly() { flyBehavior.fly(); } public abstract void display(); }
public class FlyWithWings implements FlyBehavior { @Override public void fly() { System.out.println("Я умею летать");} }
public class MallardDuck extends Duck { public MallardDuck() { flyBehavior = new FlyWithWings(); } public void display(){ System.out.println("Я дикая утка");} }
public abstract class Duck { IFlyBehavior flyBechavior; public Duck() { } public void performFly() { flyBechavior.fly(); } public abstract void display();
class FlyWithWings:IFlyBehavior { public void fly() { Console.WriteLine("Машем крыльями!"); } }
class MallardDuck : Duck { public MallardDuck() { flyBechavior = new FlyWithWings(); } public override void display() { Console.WriteLine("Я дикая утка"); } }
Решение задачи: «.NET 4.x Динамическое наследование интерфейсов»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication22 { class Program { static void Main(string[] args) { Duck md = new MallardDuck(); md.PerformFly(); md.Display(); Console.ReadLine(); } } public interface IFlyBehavior { void Fly(); } public abstract class Duck { public Duck() { } public IFlyBehavior flyBehavior; public void PerformFly() { flyBehavior.Fly(); } public abstract void Display(); } public class FlyWithWings : IFlyBehavior { public void Fly() { Console.WriteLine("Машем крыльями!"); } } public class MallardDuck : Duck { public MallardDuck() { flyBehavior = new FlyWithWings(); } public override void Display() { Console.WriteLine("Я дикая утка!"); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д