Возможно ли создать наследуемый класс из статического метода класса-предка? Есть ли возможность описать статический метод CreateFromBaseObject в классе MyBaseClass, чтобы при вызове этого метода из класса-потомка MyDerivedClass создавался экземпляр MyDerivedClass, но не использовался параметр U?
(Конечно без реализации метода CreateFromBaseObject внутри MyDerivedClass)public abstract class MyBaseClass
where T : class, new()
{
protected T RealObject = new T();
public void setRealObject(dynamic realObject) { this.RealObject = realObject; }
public static U CreateFromBaseObject(T baseObject) where U : MyBaseClass, new()
{
var t = new U();
t.setRealObject(baseObject);
return t;
}
}
...
public class MyDerivedClass : MyBaseClass{...}
...
RealDerivedClass realDerivedClass = new RealDerivedClass();
//Приходится так:
MyDerivedClass myRealDerivedClass = MyDerivedClass.CreateFromBaseObject(realDerivedClass);
//А хочется так:
MyDerivedClass myRealDerivedClass = MyDerivedClass.CreateFromBaseObject(realDerivedClass);

21 Авг 2019 в 07:04
188 +1
0
Ответы
1

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

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

public class MyDerivedClass : MyBaseClass<RealDerivedClass>
{
public static MyDerivedClass CreateFromBaseObject(RealDerivedClass baseObject)
{
return CreateFromBaseObject<MyDerivedClass>(baseObject);
}
}

Таким образом, при вызове метода CreateFromBaseObject из класса MyDerivedClass необходимо будет указать только объект baseObject, а тип класса-потомка будет определен внутри метода CreateFromBaseObject класса-потомка.

20 Апр 2024 в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир