【问题标题】:Correct use of Object Properties正确使用对象属性
【发布时间】:2010-10-20 14:38:17
【问题描述】:

下面是我创建的一个类,用于在我的美化数据输入和检索应用程序中跟踪当前人员。一旦他们选择了一个人,它就会调用构造函数,然后调用数据库来填写所有其余信息。此外,在整个计划中,他们将能够改变各个领域。

考虑到这一点,我是否正确设置了以下内容?我对属性和使用对象跨多个表单存储数据缺乏经验,如果有任何见解,我将不胜感激。

谢谢!

class CurrentPerson
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string MiddleName { get; set; }
    public string SuffixID { get; set; }
    public string TitleID { get; set; }
    public string SocialSn { get; set; }
    public string BirthDate { get; set; }
    public string Gender { get; set; }
    public string DlNumber { get; set; }
    public string DlStateID { get; set; }
    public string PrimaryRace { get; set; }
    public string SecondaryRace { get; set; }
    public string EmailAddress { get; set; }
    public string MaritalStatus { get; set; }
    public string InsertProgram { get; set; }
    public string InsertUserID { get; set; }
    public string UpdateProgram { get; set; }
    public string UpdateUserID { get; set; }
    public string LockID { get; set; }

    public int PersonID { get; set; }
    public int ClientID { get; set; }
    public int ResidencyCountyID { get; set; }
    public int ResponsibilityCountyID { get; set; }

    public bool HispanicOriginFlag { get; set; }
    public bool CitizenFlag { get; set; }
    public bool VeteranFlag { get; set; }

    public DateTime DeathDate { get; set; }
    public DateTime InsertDateTime { get; set; }
    public DateTime UpdateDateTime { get; set; }

    // Put the default Constructor back in
    public CurrentPerson(){}

    // Custom Constructor that needs the PersonID
    public CurrentPerson(int pID)
    {
        PersonID = pID;

        // Methods to get rest of data here
    }
}

【问题讨论】:

    标签: c# .net oop properties


    【解决方案1】:

    是的,看起来不错。 顺便说一句,您也可以在 get/set 上设置访问权限,使其仅公开读/写

    public DateTime DeathDate
    {
        get;
        private set;
    }
    

    【讨论】:

    • 如果我有私有集,我还能从我的表单中设置变量吗?
    • 您仍然可以在表单上使用该变量,只是不能分配给它——您的代码将无法编译。
    • 如果它是私有的,那么通过构造函数是唯一的设置方法吗?谢谢!
    • 同一类的任何成员都可以设置私有属性。外部类和方法不能设置私有属性。
    【解决方案2】:

    这在技术上没问题。他们都被宣布得很好。

    但是,对于 DB 应用程序,您通常不希望使用自动属性,因为属性设置器通常是进行一些验证以及可能将属性/对象标记为“脏”并需要保存某种。

    【讨论】:

    • 那么标准属性设置会更有用吗?
    • 可以的。这取决于你在做什么。标准属性为您提供了更多的控制权——自动属性只是让实现属性更简单的捷径。如果您想进行任何验证、记录等 - 标准属性提供了直接执行此操作的方法。但是,如果您只想像字段一样使用您的属性,那么自动属性非常棒。此外,正如 Chris 所提到的,您可以使用不同的访问级别来获取/设置标准或自动属性。
    【解决方案3】:

    auto 属性始终是 get 和 set,因此您无法控制属性集(将实例标记为脏,或其他)。因此,虽然这是一个可接受的仅作为数据实体的类,但我通常发现自动属性很少真正适用。

    【讨论】:

    • 您是说我会更好地使用带有支持字段的标准属性吗?
    • 是的,他就是这么说的。
    • 我的意思是我很少遇到在setter中真的没有额外代码的情况,所以我不能使用自动属性。所以是的,在这些情况下,我当然需要一个支持字段。
    猜你喜欢
    • 2016-06-04
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 2020-02-08
    • 2023-03-28
    • 2011-04-01
    • 1970-01-01
    相关资源
    最近更新 更多