【发布时间】:2011-08-18 11:09:44
【问题描述】:
构造函数按从上到下的顺序执行基础的第一个,然后是派生的。这种安排基于一个重要的 OOP 保证,即必须始终初始化对象(此处为基类)才能使用(此处为派生类的构造函数)。
我想知道为什么字段初始化器在 C# 中不遵循这个原则?我在这里遗漏了什么吗?
我也发现了这个原则对字段初始化器的用处。我有一个带有返回 Identity 对象的属性的基类。每个派生类都有自己的存储库字段,我一直在使用字段初始化器(使用默认构造函数)对其进行初始化。最近我决定存储库类也必须提供 Identity 对象,所以我在存储库构造函数中引入了一个额外的参数。但我坚持要找出答案:
public class ForumController : AppControllerBase
{
ForumRepository repository = new ForumRepository(Identity);
// Above won't compile since Identity is in the base class.
// ... Action methods.
}
现在我只剩下一个选项,即使用默认构造函数填充我的每个控制器,仅用于使用 Identity 初始化存储库对象。
【问题讨论】:
-
不,它不编译的原因根本不是
Identity在基类中,只是因为它是一个实例成员。因此,标题中的问题与您尝试做的事情无关......
标签: c# oop inheritance