我想知道以下哪种模式被认为是更“正确”的。类方法:以私有方法传递私有数据字段
第一个示例通过调用一个隐式接受参数的void成员函数来设置私有数据成员长度的值。 第二个示例通过将其分配给显式接受参数的成员函数的返回值来设置长度的值。
看起来,第二种方法使代码更清晰,因为您知道私有成员何时以及如何设置, 第一种方法需要跟踪代码来验证指定值的方式和方式。第二种方法 也似乎可以更好地重用,因为它可以在任何类/上下文中运行(因为参数和返回类型是显式的)。
第一种方法更快,如果在整个班级中使用(用于私人成员功能)可以节省一些编码,但是我不知道这是否会让我受到影响?
谢谢你的洞察力并为我解决这个问题。
class MyDataType
{
private int length;
private string content;
private char[] buffer;
public MyDataType(str)
{
content = str;
calculateLength();
buffer = new char[length+1];
for(int i=0; i < length; i++)
buffer[i] = content[i];
buffer[i] = NULL;
}
private void calculateLength()
{
int i = 0;
while(content[i++] != NULL) {} // i know, buffer overflow...
length = i;
}
}
class MyDataType
{
private int length;
private string content;
private char[] buffer;
public MyDataType(str)
{
content = str;
length = calculateLength(content);
buffer = new char[length+1];
for(int i=0; i < length; i++)
buffer[i] = content[i];
buffer[i] = NULL;
}
private int calculateLength(string s)
{
int i = 0;
while(s[i++] != NULL) {}
return i;
}
}
为什么第二个方法在第二个例子中不是静态的,即似乎没有使用类中的任何其他变量? – KingCronus
这仅仅是我为了争辩而鞭挞的一个例子。所以,通过问我是否静态(这是,我想这可能是),你是否暗示第一个例子是正确的?只是B/C方法可能是静态的,应该是? – samosaris
在你的第一个例子中,你有getLength方法设置私有成员变量并且不返回任何东西。通常getX方法应该返回X.也许它应该被重命名。 – Tom