.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("Я дикая утка!");
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д