Вы не можете перегружать класс, поэтому:
public class Other : Class {}
public class Other : Class, IC<Other> {}
Никогда не будет работать.
Теперь я собираюсь вытащить Джона Скита и показать, как вы могли бы сделать это, но затем отговорить вас от этого.Вы можете сделать что-то вроде этого:
public class CloneableOther : Class, ICloneable<Other> { }
public class Other : CloneableOther
{
}
public class CloneableFoo : Class, ICloneable<Foo> { }
public class Foo : CloneableFoo
{
}
То, что делает этот код, эффективно удаляет универсальный параметр из наследования.За исключением того, что Foo
все еще может делать это: Foo : CloneableFoo, ICloneable<Other>
, и теперь вам придется создавать два класса для каждого экземпляра ICloneable
.
Это входит в это , почему вам это нужно в первую очередь?Это практика Foo : IInterface<Foo>
, но нет способа ее применить.Лучше всего просто скопировать и вставить и быть уверенным, что класс соответствует.
Может быть, другой способ заключается в том, чтобы в конструкторе Class
проверить, является ли тип ICloneable
типом класса, и вызвать исключение, если это не так, иЭто может быть похоже на ошибку во время компиляции, если это сделано достаточно рано во время выполнения.