我正在学习c#并且我遇到了动态覆盖的问题,我试图使用和不同国家的国家阵列,如果一个特定的国家出现我想要使用该类的特定功能。
抽象类:
public abstract class Nazione
{
int population;
String name;
public Nazione(int p, string n)
{
population = p;
name = n;
}
public virtual int getPopulation() { return population; }
public string getName() { return name; }
}
重写的课程:
public class Italy : Nazione
{
public Italy() : base (22391392,"Italia") {}
public override int getPopulation()
{
return base.getPopulation();
}
public string Greetings() { return "Ciao"; }
}
public class Germany : Nazione
{
public Germany() : base(3428272,"Germania") { }
public override int getPopulation()
{
return base.getPopulation()/2;
}
}
主:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace test
{
class Program
{
static void Main(string[] args)
{
Nazione[] c = new Nazione[20];
c[0] = new Italy();
c[1] = new Germany();
for (int i = 0; i < 2; i++)
{
if(c[i].getName()=="Italia")
{
c[i].Greetings(); // this doesn't work :(
}
Console.WriteLine(c[i].getPopulation());
}
Console.ReadKey();
}
}
}
我无法在运行时调用italy.Greetings()
有一些范围错误,但我无法看到它,感谢您的帮助。
答案 0 :(得分:1)
您可以在示例中执行以下操作:
if(c[i].getName() == "Italia")
{
((Italy)c[i]).Greetings();
}
或者这就是我要做的事情:
var italy = c[i] as Italy;
if(italy != null)
{
italy.Greetings();
}