我想知道以下哪種模式被認爲是更「正確」的。類方法:以私有方法傳遞私有數據字段
第一個示例通過調用一個隱式接受參數的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