它是C#中封装的好例子吗?或者我应该使用公共场景;获得;

时间:2016-03-31 19:41:41

标签: c# .net encapsulation

我想写一个人类。 我不确定何时应该在物业上使用公共集合。

在以下示例中,我应该在public set属性上使用Name吗?

class Person
{
    public string Name { get; private set; }
    public DateTime DateOfBirth { get; private set; }
    public Person[] Parents 
    { 
        get { return (Person[])Parents.Clone(); }
        private set { Parents = value; } 
    }

    public Person(string Name, DateTime DateOfBirth, Person[] parents=null)
    {
        this.Name = Name;
        this.DateOfBirth = DateOfBirth;
        Parents = parents;
    }
}

1 个答案:

答案 0 :(得分:0)

如果您希望能够从依赖于类的代码更改属性 - 是的。

class program
{
    public void main()
    {
       Person p = new Person("New Born", DateTime.Now());
       :
       :
       p.Name="John";
    }
}

但是,如果名称永远不会从外部更改,只能从​​类代码中更改 - 否。

作为一般准则:

如果属性设置器是公共的,
  - 您通常不需要添加构造函数参数来强制设置它。

如果您因某种原因希望强行设置,
  - 它可能不需要公开。

但这仅仅是一般指导方针 - 而非强大的"规则。