Интерфейсы C# - только реализуют интерфейс в других интерфейсах

Я хотел бы только реализовать определенные интерфейсы в других интерфейсах, я не хочу, чтобы они были в состоянии быть наследованным непосредственно классом.

Заранее спасибо!

15
задан thecoop 17 February 2010 в 18:44
поделиться

3 ответа

Вы не можете сделать это в C # - любой класс может реализовать любой интерфейс, к которому у него есть доступ.

Зачем вам это нужно? Имейте в виду, что, объявляя наследование интерфейса:

public interface InterfaceA {}
public interface InterfaceB : InterfaceA {}

Вы указываете, что все, что реализует InterfaceB , также должно реализовывать InterfaceA , поэтому вы получите классы, реализующие InterfaceA в любом случае.

26
ответ дан 1 December 2019 в 02:46
поделиться

Лучшее, что я могу предложить, - это поместить их - и интерфейсы верхнего уровня, и подчиненные интерфейсы, в отдельную сборку, с интерфейсами базового уровня, объявленными как внутренними , и интерфейсами, расширяющими эти интерфейсы как общедоступные .

-1
ответ дан 1 December 2019 в 02:46
поделиться

Во-первых, не имеет смысла говорить "реализовать в других интерфейсах", потому что интерфейсы не могут ничего реализовать.

Я вижу два несовершенных способа сделать это, вроде как.

  1. Сделать абстрактные классы Animated и NonAnimated, которые реализуют IAnimation. Конкретный класс под ними все еще может принудительно переопределить ваши методы IAnimation с помощью оператора new:

    class SomeAnim : Animated
    {
     public new void Foo() { }
    }
    
  2. Используйте миксины. Оставьте IAnimated и INonAnimated в качестве интерфейсов, но не помещайте никаких методов в свой интерфейс. Вместо этого определите методы расширения, например, так:

    static class Ext
    {
     public static void Foo(this IAnim anim)
     {
     if (anim is IAnimated) // делаем что-нибудь
     else if (anim is INonAnimated) // do something else
     }
    }
    

опять же, немного халтурно. Но то, что вы пытаетесь сделать, в любом случае указывает на недостатки дизайна.

1
ответ дан 1 December 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: