它是 C# 封装的好例子吗?或者我应该使用 public set;得到;?

Is it good exapmple of encapsulation in C# ? Or should i use public set; get;?

我要写一个人class。 我不确定什么时候应该在 属性.

上使用 public

在下面的例子中,我应该在 Name 属性 上使用 public set 吗?

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;
    }
}

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

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

但是,如果名称不应该从外部更改而只能从 class 代码内部更改 - 不。

一般准则:

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

如果您出于某种原因确实希望强制设置它,
- 可能不需要 public.

但这只是一般准则 - 不是 "strong" 规则。