abstract class Person
{
public abstract void LoadName(string name);
}
class Soldier : Person
{
string soldierName;
int ID;
public override void LoadName(string name)
{
soldierName = name;
}
public void LoadName(int id)
{
ID = id;
}
}
class PersonManager
{
public void LoadNames(Person[] person, string[] names, int[] id)
{
for(int i = 0; i < p.Length; i++)
{
person[i].LoadName(names[i]);
if(person[i] is Soldier)
{
/* What I want to do:
person.LoadName(id[someValue]);
-> Cannot convert from 'string' to 'int'
or:
(Soldier)person.LoadName(id[someValue]);
-> Only assignment, call, increment, decrement and new object expressions can be used as a statement
*/
// What I have to do:
Soldier s = (Soldier)person[i];
s.LoadName(id[someValue]);
}
}
}
}
有沒有更好的方法來做到這一點? 我原來的班級比較大,所以複製它並不理想。來自繼承類的調用方法
(注意,這個例子是沒有關係到我的項目,所以它可能不是最好的例子。)
此問題可能更適合http://codereview.stackexchange.com/。 – sstan
我會將'LoadName'更改爲'SetName'。 'LoadName'意味着它將獲取名稱,並因此返回一個字符串。 – AustinWBryan
爲什麼不將包含id的LoadName包括到抽象類中並覆蓋兩者? –