【发布时间】:2015-06-22 18:15:58
【问题描述】:
我想知道如何在 C# 中处理依赖属性。我有以下简化类(我正在使用DevExpress XAF):
public class Company
{
public ContactMethods? PreferredContactMethod { get; set; }
// Missing: Collection of Employees...
}
public class Employee
{
private Company company;
public Company Company
{
get
{
return this.company;
}
set
{
company = value;
if (company != null && PreferredContactMethod == null)
{
PreferredContactMethod = company.PreferredContactMethod;
}
}
}
public ContactMethods? PreferredContactMethod { get; set; }
}
将Company分配给Employee时,我将Employee.PreferredContactMethod设置为Company的PreferredContactMethod(只是为了方便,以后可以更改)。
更新:
我想在初始化新员工时使用 Company.PreferredContactMethod 作为默认值。每个员工都独立于公司存储自己的 ContactMethod。以后对 Company.PreferredContactMethod 的更改不应更新 Employee.PreferredContactMethod。 Employee.PreferredContactMethod 为 null 是完全合法的(例如,如果明确设置为用户)。
相当简单的代码,当然这工作得很好。但我认为它违反了Microsoft's Property Design Guidelines:
请允许以任何顺序设置属性,即使这会导致 临时无效对象状态。
Company = A, PreferredContactMethod = null 给出的结果与PreferredContactMethod = null, Company = A 不同。
我认为我不能依赖属性设置器的“正确”顺序(例如,如果使用 Automapper/Reflection),您如何处理这种情况?我认为这并不少见。
谢谢!
【问题讨论】:
-
您希望员工的 PreferredContactMethod 始终与公司的一致吗?如果调用 Employee.PreferredContactMethod 的 setter 会发生什么,这会影响 Company.PreferredContactMethod 的值吗?也许您可以为 Employee 使用自定义 getter,即 Employee.PreferredContactMethod 返回 Employee.company.PreferredContactMethod?
-
我更新了我的要求。我希望现在更清楚了。我经常在我的业务对象中使用类似的代码
-
我认为我的要求(为方便起见将属性初始化为默认值)在某种程度上与 UI 相关。也许使用一些 UI-Controller 代码是更好的方法?你怎么看?
标签: c# oop properties xaf