C # clone () с принудительным распознаванием подтипа компилятором

Не думаю, что это возможно, но, может быть, я ошибаюсь. Я хочу иметь clone () в супертипе

public abstract class LivingThing {
    public abstract T clone<T>() where T : LDBASTobj;
}

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

// doesn’t compile
public class Animal : LivingThing  {
    public Animal clone() => new Animal();
}

Это кажется разумным в принципе, потому что Animal - это замещаемый (ковариантный?) Подтип LivingThing. Приведенный выше код подтипа - мусор, но я надеюсь, вы понимаете, что я имею в виду. Это возможно?

(этот вопрос клон C # из супертипа - это не то, что мне нужно).

Спасибо


person user3779002    schedule 05.01.2021    source источник
comment
Это звучит ужасно похоже на это   -  person MindSwipe    schedule 05.01.2021
comment
Я искал, прежде чем опубликовать, и не нашел связанного ответа, спасибо. Следует ли мне удалить вопрос как беспорядок или лучше оставить его? (Редактировать: я пробовал создать общедоступный абстрактный класс Animal ‹T›, где T: Animal ‹T› и почти получил его!)   -  person user3779002    schedule 05.01.2021
comment
Как вы хотите использовать clone?   -  person MichaelMao    schedule 05.01.2021
comment
@MichaelMao - я хочу, чтобы информация о подтипе сохранялась, чтобы компилятор мог обнаруживать ошибки.   -  person user3779002    schedule 05.01.2021
comment
Не могли бы вы предоставить образец кода, как вы хотите использовать и какой результат вы хотите получить?   -  person MichaelMao    schedule 05.01.2021
comment
@MichaelMao: Спасибо, но в этом нет необходимости. В любом случае мне нужно реализовать общий clone (), и в любом случае потребуется клон для конкретного типа для каждого подтипа. Ковариантный клон был бы хорош, но неважно. В любом случае нужно просто отшлифовать код. Спасибо.   -  person user3779002    schedule 05.01.2021