#c# #inheritance #static #abstract
Вопрос:
У меня есть много классов, унаследованных от абстрактного класса. Я хотел бы, чтобы статический метод возвращал новый объект для каждого из них, и мне было интересно, не могу ли я сократить код таким образом:
class Foo : Bar
{
// I don't want to write this in every child class
public static Foo create(paramsFoo) => new Foo(paramsFoo);
}
abstract class Bar
{
// is something like this possible without using generics?
public static "getchildtype" create("paramsofchild") => new "getchildtype"("paramsofchild")
// if not, is there a way to do that with generics?
// would it be possible if there were no parameters?
}
Я знаю, что мог бы просто использовать слово «новый», но мне нравится, как это будет выглядеть:
something = Foo.create(params);
Комментарии:
1. вам следует взглянуть на фабричный образец .
2. Также было бы очень полезно, если бы вы писали даже псевдокод как можно более реалистично, следуя соглашениям об именах и как можно более точно следуя существующему синтаксису C#. (Я не знаю, что
paramsFoo
означает вашеcreate
объявление метода, потому что объявление метода недействительно.)3. Просто используйте
new
, двигайтесь дальше по жизни и решайте более серьезные проблемы 🙂4. Если детям нужны все разные наборы параметров, нет смысла объединять метод создания.
5. «//было бы возможно, если бы не было параметров? » = > >
public static T Create<T>() where T : Bar, new()
— но это не имело бы очевидной выгодыnew Foo()
.