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包括到抽象类中并覆盖两者? –