我是C#的新手,并且正在尝试设置一个非常基本的应用程序来创建类/模型:
public class Customer
{
public int CustomerID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string Zipcode { get; set; }
public string City { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
}
现在,当我尝试从另一个类实例化客户对象时:
Customer c1 = new Customer(1, "Susan", "Peterson", "Borgergade 45", "8000", "Aarhus", "supe@xmail.dk", "21212121");
我明白了:
' PetParadiseHotel.Models.Customer'不包含构造函数 需要8个参数
根据我的理解,它应该有8个参数,所以这里有什么问题?
答案 0 :(得分:3)
您必须为您的班级
创建一个构造函数public class Customer
{
public Customer(int customerID, string firstName, string lastName, string address,
string zipCode, string city, string email, string phone)
{
CustomerID = customerID;
FirstName = firstName;
// ...
Phone = phone;
}
public int CustomerID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string Zipcode { get; set; }
public string City { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
}
然后调用它(就像你做的那样)
var customer = new Customer(1, "Susan", "Peterson", "Borgergade 45", "8000", "Aarhus", "supe@xmail.dk", "21212121");
或者您可以使用对象初始值设定项:
var customer = new Customer() { CustomerID = 1, FirstName = "Susan" ... Phone = "21212121"}
答案 1 :(得分:2)
public class Customer
{
public Customer()
{
}
...
}
换句话说,它确实没有做任何事情,也没有任何争论。这允许您仅使用语法来新建它:
var customer = new Customer();
如果您希望能够将所有这些值传递给构造函数,则必须按以下方式创建自定义构造函数:
public class Customer
{
public Customer(int customerId, string firstName, string lastName, string address, string zipCode, string city, string email, string phone)
{
CustomerId = customerId;
FirstName = firstName;
LastName = lastName;
Address = address;
ZipCode = zipCode;
City = city;
Email = email;
Phone = phone;
}
...
}
您还需要重新定义"默认"构造函数,或者你永远不能只是新建一个空的Customer
:
public Customer()
{
}
此外,如果您只想传递这些属性的某些子集而不是每个属性,则需要为每个子集创建其他构造函数,或者为任何未传入的参数提供构造函数的默认值。无论长短,这都是非常艰巨的,并使维护成为一场血腥的噩梦。值得庆幸的是,C#还具有所谓的对象初始化语法。您可以使用大括号代替括号,并明确设置要显示的每个属性:
var customer = new Customer
{
CustomerId = 1,
FirstName = "Susan",
LastName = "Peterson",
...
}
这种方法的好处是你可以保留默认的构造函数,但仍然设置你想要的每个属性"初始化"。此外,您可以指定要初始化的任何属性子集,因此如果您不想设置Phone
属性,请将其保留。一切都会好起来的。
答案 2 :(得分:0)
一般来说,我发现如果超过3个,那就是对设计进行快速健全性检查的标志。如果超过5,这是一个重要的警告,表明设计可能有问题。
然而,请注意“可能”这个词 - 最后,唯一真正的规则是使用尽可能多的功能,不多也不少。总会有例外和情况,其中更多参数最有意义。
如果参数以某种方式相关,则应将它们封装到容器类中。