这是构造函数声明吗?

时间:2016-11-03 20:44:39

标签: c# class oop methods constructor

我是C#语言的新手,并在网站上遇到过这种声明。我之前没有见过这种类型的构造函数(?),所以我真的很困惑:

  public class Employee { 

  public string Name { get; set; } 
  public string Title { get; set; }  

  public static Employee GetEmployee() {          //Constructor? Method?
     var emp = new Employee() { 
        Name = "Somebody", Title = "Developer" 
     }; 
     return emp;                                  //Returns to a method? 

非常感谢。

4 个答案:

答案 0 :(得分:4)

//Constructor? Method?

方法。静态方法。

此模式通常与私有构造函数一起使用:

public static Employee GetEmployee()
{
    return new Employee()
    { 
        Name = "Somebody", Title = "Developer" 
    }; 
}

private Employee() { }

私有构造函数确保只使用其中一个静态方法创建类的实例

这种"工厂方法"比构造函数更灵活:

  • 它可以返回子类的实例(通常与私有的内部子类一起使用),
  • 它有一个名称,可以提高可读性,并允许您使用相同的参数列表但名称不同的多个工厂方法(例如GetDeveloper()GetManager())。

但是,它也有一个缺点:您只能在构造函数中设置readonly个字段。因此,如果Employee是具有只读字段的不可变类,则在使用此模式时,您需要将所有值传递给私有构造函数。

答案 1 :(得分:1)

这不是构造函数,只是一个普通的静态方法。

accessibilityIdentifier

答案 2 :(得分:1)

我猜你正在询问对象初始化程序。它不是构造函数,但静态方法调用默认构造函数,然后使用对象初始化程序语法在新对象上设置两个属性。

如果必须为方法命名,则称其为工厂方法。这个方法没有什么特别之处,它只是一个返回新对象实例的静态方法。它恰好实现了一种称为工厂模式的通用软件模式。

工厂模式有一些常见用途。最近为我提出的一个例子有时我想创建一个新的对象实例,有时我想返回一个现有的实例。工厂模式以对调用者透明的方式支持它。另一个常见用途是当调用者不知道正在创建的特定类型时 - 调用者可能只需要对接口或基类的引用,并且工厂决定要实例化的特定类。

答案 3 :(得分:0)

你在代码中看到的是一个简单的静态函数,它创建了一个对象的实例,虽然为了完整,但是应该隐藏创建一个Employee对象的abbilty,方法是将构造函数设为私有,因为构造函数的默认行为是公开的

  

如果类不包含实例构造函数声明,则为默认值   实例构造函数是自动提供的。那个默认   构造函数只是调用direct的无参数构造函数   基类。

来自fiddle