Я хотел бы только реализовать определенные интерфейсы в других интерфейсах, я не хочу, чтобы они были в состоянии быть наследованным непосредственно классом.
Заранее спасибо!
Вы не можете сделать это в C # - любой класс может реализовать любой интерфейс, к которому у него есть доступ.
Зачем вам это нужно? Имейте в виду, что, объявляя наследование интерфейса:
public interface InterfaceA {}
public interface InterfaceB : InterfaceA {}
Вы указываете, что все, что реализует InterfaceB
, также должно реализовывать InterfaceA
, поэтому вы получите классы, реализующие InterfaceA
в любом случае.
Лучшее, что я могу предложить, - это поместить их - и интерфейсы верхнего уровня, и подчиненные интерфейсы, в отдельную сборку, с интерфейсами базового уровня, объявленными как внутренними
, и интерфейсами, расширяющими эти интерфейсы как общедоступные
.
Во-первых, не имеет смысла говорить "реализовать в других интерфейсах", потому что интерфейсы не могут ничего реализовать.
Я вижу два несовершенных способа сделать это, вроде как.
Сделать абстрактные классы Animated и NonAnimated, которые реализуют IAnimation. Конкретный класс под ними все еще может принудительно переопределить ваши методы IAnimation с помощью оператора new:
class SomeAnim : Animated
{
public new void Foo() { }
}
Используйте миксины. Оставьте IAnimated и INonAnimated в качестве интерфейсов, но не помещайте никаких методов в свой интерфейс. Вместо этого определите методы расширения, например, так:
static class Ext
{
public static void Foo(this IAnim anim)
{
if (anim is IAnimated) // делаем что-нибудь
else if (anim is INonAnimated) // do something else
}
}
опять же, немного халтурно. Но то, что вы пытаетесь сделать, в любом случае указывает на недостатки дизайна.