使用接口嵌套类

时间:2012-06-29 18:08:33

标签: c# oop class inheritance interface

我有一个小问题。

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

现在,经过一段时间后,我需要在每个类中使用函数Generate,该函数派生自FirstLevel或者父元素是从FirstLevel派生的。我认为该接口可以是一个很好的解决方案,所以我开始为每个类实现接口IGenerable,这个类与FirstLeve l类有共同之处(它是派生的,或者它的父元素是派生的,或者是它的父元素....)我已经将它实现到FirstLevel类。

这是我的问题的开始。我需要在List<FirstLevel>中的每个项目上调用generate函数。但我不知道是否会在IGenerable中调用FirstLevel的实现,或在派生类中调用IGenerable的实现。我希望计算机将在派生类中执行调用实现。请告诉我它是怎么回事。

但是,如果将FirstLevel称为实施,请帮助我并提出一些解决方案。感谢。

1 个答案:

答案 0 :(得分:2)

不是使用Interface,而是通过向基类(FirstLevel)添加虚函数Generate,然后根据需要覆盖后代中的方法,可能会更好。现在当你遍历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.");
        }
    }
}