【发布时间】:2014-08-14 21:23:17
【问题描述】:
如果我有如下课程:
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 关于在哪里使用属性的内容,其中指出属性不应相互依赖。
使用属性和方法不会破坏封装,因为这意味着您将内部实现细节暴露给外部代码?
在这种情况下,您不想公开存储了哪些值以及派生了哪些值,您应该怎么做?大概它们都应该是方法,或者它们都应该是属性,但哪个?
【问题讨论】:
-
为什么不把
FullName设为仅使用 getter 的属性,第一个和最后一个全名和子字符串似乎是一个非常糟糕的主意,因为您如何知道子字符串的位置(想想连字符的名称) -
我一直以为properties就是为了这个。
-
@sa_ddam213 我在第 2 点中阅读的here 的准则指出属性不应相互依赖。那有错吗?
-
它们是指导线而不是事实线
-
我很确定这不会产生相互依赖关系,因为
FullName属性没有设置器。相互依赖是指您有多个 setter 来修改相同的基础数据。在假设的示例中,您只能通过一次分配修改一条数据。
标签: c# properties encapsulation