我是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?
非常感谢。
答案 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