如果我有如下课程:
public class Name
{
public String FirstName { get; set; }
public String LastName { get; set; }
public String FullName()
{
return FirstName + " " + LastName;
}
}
FullName()连接名字和姓氏,因此它是一个方法是有意义的。假设我改变了类的工作方式,因此它将全名存储为字符串,FirstName和LastName返回子字符串。因此,FirstName和LastName是方法,而FullName是属性。我读了these guidelines关于使用属性的地方,这些属性声明属性不应该是相互依赖的。
没有使用属性和方法打破封装,因为这意味着您将内部实现细节暴露给外部代码?
在这种情况下,您不希望公开哪些值存储以及哪些值是派生的,您应该怎么做?据推测,他们应该都是方法,或者他们应该都属于哪些属性?
答案 0 :(得分:1)
如果属性应该或不应该是独立的,这是有争议的。
我会说,在你的情况下,拥有财产
public String FullName { get { return FirstName + " " + LastName; } } // no set
看起来可以接受。
与.NET Rectangle.Bottom属性进行比较,该属性返回两个其他属性的总和
y坐标,即此矩形的Y和高度的总和。
答案 1 :(得分:0)
如果您想严格遵循这些准则,那么我将为First和Last名称创建完整属性,并在FullName上使用仅限访问者访问私有字段,因为他的指南仅提及属性依赖性而非字段依赖性。
我认为指南是基于事实逻辑可以在getter和setter中执行,走现场路线将消除风险
示例:
public class Name
{
private string _firstName;
private string _lastName;
public string FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
public string LastName
{
get { return _lastName; }
set { _lastName = value; }
}
public string FullName
{
get { return _firstName + " " + _lastName; }
}
}