【问题标题】:c# create class instance using method inside classc# 使用类内部的方法创建类实例
【发布时间】:2019-03-29 19:35:39
【问题描述】:

我有一个名为 User 的类,可以像这样初始化它:

User user = new User();

这很好用,但在某些情况下,我想在用户类内部调用静态方法,这样代码现在看起来像这样:

User user = User.SomeMethod();

我相信这不是特别难,因为我在System.Diagnostics.Process看过它:

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

我怎样才能让我的班级也这样做?

编辑:

这就是我的班级的样子:

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
        }
    }

我是否缺少方法构造函数?

【问题讨论】:

  • 可以给用户类添加静态方法
  • 你不明白什么?你问如何创建一个静态方法?如何返回一个值?
  • public static User Create() => new User();
  • 你需要让你的方法返回一个值。

标签: c# class methods instance


【解决方案1】:

你说的是这样的事情吗? 没有方法构造函数,但您可以从方法内部调用构造函数。您还可以有一个从该方法调用的私有构造函数。

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...");
    }
}

【讨论】:

  • 我原本打算让 SomeMethod() 无效,因为我不想返回任何东西
  • 如果你想通过它初始化一个变量,somemethod() 返回类型怎么会是无效的...
【解决方案2】:

您要实现的目标称为工厂模式。大多数情况下,您创建一个单独的类,将工厂名称添加到其中,它将为您创建用户类。如果要控制 User 类的创建方式,请使用工厂模式:

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

注意:上面的代码只是简单的解释,工厂模式的内容比较多,比几行代码要复杂。如果您需要了解更多信息,可以查看下一个link ,它将为您提供详细说明。

如果您希望 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
            };
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    相关资源
    最近更新 更多