维护属性和方法的封装性



如果我有这样一个类:

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

最新更新