Есть ли C# сокращение для создания нового экземпляра содержащего типа? - PullRequest
0 голосов
/ 30 апреля 2020

Скажем, у меня есть класс с именем Foo, а внутри Foo есть метод stati c, называемый GetInstance, который возвращает тип Foo. Есть ли C# сокращенный способ для GetInstance создать экземпляр Foo без необходимости вводить «new Foo ()»?

Другими словами, если вы вызываете метод, который создает объект того же типа, который метод принадлежит, есть ли специальное ключевое слово C#, которое создает экземпляр содержащего типа?

Пример кода:

public class Foo
{
    public static Foo GetInstance()
    {
        return new Foo(); //is there something like new container() or maybe just constructor()
    }
}

1 Ответ

2 голосов
/ 30 апреля 2020

Нет, такого ключевого слова нет в C#.

Самый короткий способ, который я могу придумать, который на самом деле не относится к типу вложения, использует отражение:

return Activator.CreateInstance(MethodBase.GetCurrentMethod().DeclaringType);

Но учтите, что:

  • Это будет медленнее, чем прямая ссылка на тип (влияет ли это на производительность в целом, зависит от того, как часто он вызывается)
  • Работает, только если тип имеет конструктор без параметров

Так что используйте на свой страх и риск ...

...