gpt4 book ai didi

c# - 公共(public)属性(property)与静态只读

转载 作者:太空宇宙 更新时间:2023-11-03 11:46:12 27 4
gpt4 key购买 nike

我正在尝试在三种不同的实现中做出决定。

我有一个 IPerson 接口(interface),所有类型的人(即警察、学生、律师)都实现了这个接口(interface)。每个人类型都需要有不同的 AddressLocation(即家庭、办公室、邮寄)。这个位置永远不会改变,所以它可以是静态的/只读的。人是一般处理的,所以我的保存方法 SavePerson(IPerson person) 接受从 IPerson 接口(interface)继承的任何东西,我有一个接受 ID 的 LoadPerson(int ID) 方法。

我最初的解决方案是向 IPerson 添加一个 DefaultLocation 属性,并且只有一个 getter。这样我就可以使用通用方法来保存数据。当我尝试加载数据时出现问题,因为我还没有类的实例,所以我无法引用该属性。

另一方面,我可以为我的每个人员类型创建一个 public static readonly DefaultLocation 属性。在这种情况下,我可以调用 Student.DefaultLocation 并将其传递到加载我的数据的方法中。

我应该走哪条路,为什么?两者似乎各有利弊。

当我输入这个问题时,我想到了第三个选项:如果我使用一个 public static readonly proprty,它可以在没有类实例化的情况下被引用,然后使用一个没有 setter 的公共(public)属性,可以从泛型方法调用,会怎样?

我听从了 Jon 的建议:

public interface IPerson
{
LocationType DefaultLocation { get; }
}

public class PoliceOfficer : IPerson
{
public static readonly LocationType _DefaultLocationType = LocationType.Office;
public LocationType { get { return _DefaultLocationType; } }
}

最佳答案

最后一个选项对我来说听起来是最好的 - 至少如果您希望每个类型的位置都可用于其余代码。如果你不这样做,我会在每种类型中使用一个私有(private)的只读静态字段,并从实例属性中返回该值。 (我假设位置是不可变的。)

基本上,您在这里以一种稍微不寻常的方式使用多态性,因为它不依赖于特定对象的状态或任何特定行为,而是依赖于类型方面的状态。请注意,通过在接口(interface)中使用一个属性而不是在构造函数中使用一个带有字段集的抽象基类,您可以避免每个实例都有一个具有基本冗余数据的字段。

关于c# - 公共(public)属性(property)与静态只读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3389096/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com