【发布时间】:2015-09-30 17:07:43
【问题描述】:
在PHP 度过了我一生的大部分时间之后,我最近开始在C# 做一些编程。
在PHP 我可以这样做:
class User
{
public __construct($UserId)
{
// Do stuff
}
}
class Employee extends User
{
public __construct($EmployeeId)
{
// Look up the UserId connected to $EmployeeId
$UserId = hypothetical_get_user_id_func($EmployeeId);
parent::__construct($UserId);
}
}
但是,在C# 中我似乎没有这种可能性,因为似乎我必须在$UserId 进入第一个构造函数之前知道它。
public class User
{
public User(int UserId)
{
// Do stuff
}
}
public class Employee : User
{
public Employee(int EmployeeId) : base(***) // I don't know this value yet?
{
// This is where I would find the User Id, and would like to pass
// it to the User class constructor.
}
}
有什么方法可以实现我在 C# 中尝试做的事情吗?
基本上将一个值传递给主对象的构造函数,它在自己的主体中计算出要传递给基类的值。
【问题讨论】:
-
您必须将 userId 作为另一个参数。
-
那是不可能的。但是你可以调用一个静态方法并传递它的结果。
-
正如 SLaks 所说,这是不可能的。但有充分的理由。您的构造函数不应包含业务逻辑。您所说的听起来更像是 DAL/Factory。在 C# 中,我们鼓励 SOLID 设计原则,而您正在尝试做的事情打破了 SOLID 的关注点分离部分。
标签: c# class oop inheritance constructor