public abstract class Base
{
public Base ClassReturn()
{
return this;
}
}
Есть ли возможность вернуть дочерний тип, который вызвал метод ClassReturn? Я сделал, что в методе расширения:Тип возвращаемого ребенка в Родительском классе
public static T ClassReturn<T>(this T obj) where T : Base
{
return (T) obj.ClassReturn();
}
Но я хочу embeed его в базовом классе вместо метода расширения. Есть ли возможность сделать это с помощью дженериков?
Я скопировать мой комментарий, который описывает то, что я хочу добиться:
мне нужно что-то похоже на строитель шаблона и у меня есть разные классов, в зависимости от предыдущих операций делать что-то еще, теперь я хочу имеют одинаковые функциональные возможности в каждом из них, и когда я использую , я теряю тип объекта. Поэтому мое решение либо реализует функцию несколько раз в каждом классе, либо создает расширение . Но я всегда думал, когда можно сделать расширение метод для класса, тогда я могу использовать его в классе, но, как я вижу, невозможно.
Полный пример:
public class Child1 : Base
{
public Child1 Operation1()
{
Console.WriteLine("operation1");
return this;
}
}
public class Child2 : Base
{
public Child2 Operation2()
{
Console.WriteLine("operation2");
return this;
}
}
static void Main(string[] args)
{
Child1 ch = new Child1();
ch.Operation1().Operation1().ClassReturn().Operation1()
}
Я не могу использовать operation1 после ClassReturn, если я не использую метод расширения.
Что вы пытаетесь достичь? Вы даже должны знать, что дочерний класс существует в базовом классе. Btw, если вы хотите, вы можете просто переместить этот метод расширения в базовый класс, просто удалив параметр и удалив статический модификатор. –
Ваш вопрос спрашивает, возможно ли вернуть этот тип, но ваш примерный код возвращает экземпляр Type. Вы пытаетесь проверить тип дочернего элемента в базовом классе? –
Предположим, что класс Child1, который наследует базовый класс, вызывает ClassReturn() без метода расширения, в результате я получаю ссылку на базовый класс вместо класса Child1, что приводит к необходимости кастинга. Я хочу получить экземпляр класса Child1, если я вызываю его как Child1 и получаю экземпляр класса Child2, если я вызываю его как Child2. @SriramSakthivel это не сработает, потому что я не могу получить дочерний родовой тип – MistyK