Кажется, вы просто используете переданный экземпляр, чтобы получить его тип и создать новый экземпляр этого типа.Мне это кажется странным.
Кроме того, вы смешиваете две вещи: инициализация предполагает, что вы уже создали экземпляр , как в вашем текущем коде.Вы можете передать этот экземпляр в ваш метод и изменить его свойства или поля, но вы не можете изменить этот экземпляр (если вы не используете ref
-ключевое слово).Вместо этого вы, похоже, хотите передать тип методу и позволить этому методу создать новый экземпляр этого типа.
public BaseClass MethodWithBaseClass(Type baseClass)
{
return (BaseClass) Activator.CreateInstance(baseClass);
}
Теперь назовите это так:
var newInstance = MethodWithBaseClass(typeof(Derived1));
Это, конечно, выкинет InvalidCastException
, если вы предоставите тип, который не наследуется от BaseClass
.Это означает, что вы теряете строгую типизацию, то есть вы не знаете, когда compile - точный тип, полученный из метода.Вы также можете сделать метод универсальным:
public T MethodWithBaseClass<T>() where T: BaseClass, new()
{
return new T();
}
и вызвать его так:
var newInstance = MethodWithBaseClass<Derived1>();
Это позволяет строго печатать, но предполагает, что вы знаете точный тип во время компиляции.