它是 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" 规则。
我要写一个人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" 规则。