Есть ли способ наследовать статическую функцию, вызывающую конструктор дочернего класса с параметрами?

#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() .