【发布时间】:2011-03-24 06:39:57
【问题描述】:
我正在尝试在三种不同的实现中做出决定。
我有一个 IPerson 接口,所有类型的人(即警察、学生、律师)都实现了这个。每种类型的人都需要有不同的 AddressLocation(即家庭、办公室、邮寄地址)。这个位置永远不会改变,所以它可以是静态/只读的。人们是一般处理的,所以我的保存方法 SavePerson(IPerson person) 采用从 IPerson 接口继承的任何东西,并且我有一个采用 ID 的 LoadPerson(int ID) 方法。
我最初的解决方案是向 IPerson 添加一个 DefaultLocation 属性,并且只有一个 getter。这样我就可以使用通用方法来保存数据。当我尝试加载数据时出现问题,因为我还没有该类的实例,因此我无法引用该属性。
另一方面,我可以在我的每个人员类型上创建一个公共静态只读 DefaultLocation 属性。在这种情况下,我可以调用 Student.DefaultLocation 并将其传递给加载数据的方法。
我应该走哪条路,为什么?两者似乎各有利弊。
当我输入这个问题时,我想到了第三个选项: 如果我使用可以在没有类实例化的情况下引用的公共静态只读属性,然后使用没有可以从泛型方法调用的 setter 的公共属性怎么办?
根据 Jon 的建议,我接受了:
public interface IPerson
{
LocationType DefaultLocation { get; }
}
public class PoliceOfficer : IPerson
{
public static readonly LocationType _DefaultLocationType = LocationType.Office;
public LocationType { get { return _DefaultLocationType; } }
}
【问题讨论】:
标签: c# design-patterns