0

我有一个小问题。

当我开始编写我的应用程序时,我将同一级别的类型分组到类FirstLevel(该级别的所有类型都派生自FirstLevel)。之后,我开始使用这种类型创建通用列表,并且我的代码正在使用它而没有任何错误。

现在,一段时间后,我需要Generate在每个FirstLevel派生自 FirstLevel 或其父类派生自 FirstLevel 的类中使用函数。我认为接口可以是很好的解决方案,所以我开始为IGenerable每个与 l 类有共同点的类实现接口FirstLeve(它是派生的,或者它的父级是派生的,或者它的父级的父级......)我已经实现了它也上一级课。

这是我的问题的开始。我需要对中的每个项目调用生成函数List<FirstLevel>。但我不知道是否会被称为IGenerablein 的FirstLevel实现,或IGenerable派生类的实现。我希望计算机将在派生类中执行实现调用。请告诉我情况如何。

但是,如果将调用实现FirstLevel,请帮助我并提出一些解决方案。谢谢。

4

1 回答 1

2

最好不要使用接口,而是将虚函数 Generate 添加到基类(FirstLevel)中,然后根据需要覆盖后代中的方法。现在,当您遍历 List 并调用 Generate 时,如果该对象有一个被覆盖的方法,它将执行该方法,否则它将从基础对象执行该方法。

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var objs = new List<FirstLevel> { new FirstLevel(), new SecondLevel(), new ThirdLevel(), new SecondLevel2() };
            objs.ForEach(o => o.Generate());
            Console.ReadLine();
        }

    }

    public class FirstLevel
    {
        public virtual void Generate()
        {
            Console.WriteLine("First Level Generate called.");
        }
    }

    public class SecondLevel : FirstLevel
    {
        public override void Generate()
        {
            Console.WriteLine("Second Level generate called.");
        }
    }

    public class SecondLevel2 : FirstLevel
    {

    }
    public class ThirdLevel : SecondLevel
    {
        public override void Generate()
        {
            Console.WriteLine("Third Level genrate.");
        }
    }
}
于 2012-06-29T18:28:24.363 回答