如果我有这样一个类:
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成为属性就有意义了。我读了这些关于在哪里使用属性的指南,其中指出属性不应该是相互依赖的。
使用属性和方法是否会破坏封装,因为这意味着您将内部实现细节暴露给外部代码?
在这种情况下,你不想暴露哪些值是存储的,哪些值是派生的,你应该怎么做?假设它们都应该是方法或者都应该是属性,但是哪一个呢?属性是否应该是独立的,这是有争议的。
我想说在你的例子中,有属性
public String FullName { get { return FirstName + " " + LastName; } } // no set
是可以接受的。
与。net矩形比较。属性,该属性返回其他两个属性
的和。这个矩形的Y坐标是Y和Height的和。
如果你想严格遵循这些指导方针,那么我会为First和Last name创建完整的属性,并在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; }
}
}