c # создать экземпляр класса, используя метод внутри класса - PullRequest
0 голосов
/ 29 марта 2019

У меня есть класс с именем User, где его можно инициализировать так:

User user = new User();

Это прекрасно работает, но в некоторых случаях я хочу вызвать статический метод внутри класса User, чтобы код теперь выглядел следующим образом:

User user = User.SomeMethod();

Я уверен, что это не очень сложно, потому что я видел, как это было сделано в System.Diagnostics.Process:

Process p = Process.Start("filename");

Как я могу заставить мой класс делать то же самое?

EDIT:

Вот так выглядит мой класс:

public class User
    {
        public User()
        {
            // this runs when User u = new User() is called
        }

        public static void SomeMethod()
        {
            // I want this to run when "User u = User.SomeMethod() is called
        }
    }

Мне не хватает конструктора метода?

Ответы [ 2 ]

2 голосов
/ 29 марта 2019

Вы говорите о чем-то подобном? Там нет конструктора метода, но вы можете вызвать конструктор изнутри метода. Вы также можете иметь приватный конструктор, который вызывается из этого метода.

class User {
    ...

   public User() {}
   private User(string s) {
       // Can only be called inside User class
       Console.WriteLine(s);
   }

    public static User Create() {
        return new User("Creating user from method...");
    }
}
0 голосов
/ 29 марта 2019

То, что вы пытаетесь достичь, называется шаблоном Factory. В большинстве случаев вы создаете отдельный класс, добавляете в него имя Фабрики, и это создаст для вас класс User. Используйте фабричный шаблон, если вы хотите контролировать, как создается класс User:

public class UserFactory
    {
        public static User CreateUser()
        {
            return new User();
        }
    }

Примечание. Приведенный выше код является простым объяснением, в фабричном шаблоне больше вещей, и он сложнее, чем несколько строк кода. Если вам нужно узнать больше, вы можете проверить следующую ссылку , которая даст вам подробное объяснение.

Если вы хотите, чтобы класс User отвечал за создание себя статическим методом, посмотрите на пример ниже:

public class User
    {
        public string Name { get; set; }
        public string LastName { get; set; }
        public User()
        {

        }
        public static User CreateUser()
        {
            return new User();
        }
        public static User CreateUser(string name, string lastName)
        {
            return new User
            {
                Name = name,
                LastName = lastName
            };
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...