如何在运行时动态覆盖函数c#

时间:2014-08-09 10:50:08

标签: c#

我正在学习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()有一些范围错误,但我无法看到它,感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以在示例中执行以下操作:

if(c[i].getName() == "Italia")
{
    ((Italy)c[i]).Greetings(); 
}

或者这就是我要做的事情:

var italy = c[i] as Italy;
if(italy != null)
{
   italy.Greetings();
}