如何使子类自动调用超类方法

时间:2019-05-16 02:21:45

标签: c# unity3d

我是C#的新开发人员,并且我正在使用unity3d开发游戏。 我设计了一个接口来实现游戏中的技能系统。但是我发现了一些麻烦。这里有很多Skill类,我必须在它们的show()内部手动调用apply方法。

interface ISkill
{
    void apply();
}

class Base
{
    protected string name { get; set; }
    protected void show()
    {
        Console.WriteLine("show:"+name);
    }
}

class Skill1 : Base, ISkill
{
    public Skill1()
    {
        name = "skill1";
    }
    public void apply()
    {
        show();
        Console.WriteLine("skill1 apply");
    }

}
class Skill2 : Base, ISkill
{
    public Skill2()
    {
        name = "skill2";
    }
    public void apply()
    {
        show();
        Console.WriteLine("skill2 apply");
    }

}
Skill3
Skill4
etc.. 

class Program
{
    public static void Main(string[] args)
    {
        ISkill skill = new Skill2();
        skill.apply();

    }
}

如何修改我的代码,以便所有SkillX类都可以在show()方法中自动调用apply()方法?

2 个答案:

答案 0 :(得分:2)

为此的标准解决方案是template method

基类将方法实现为“模板”,它强制派生类为该方法提供特定步骤。在您的情况下,Base类应实现首先调用Apply的{​​{1}}方法,然后通过强制它们通过Show提供第二部分的实现,将其余的委托给派生类。 :

abstract void ApplyImplementation()

答案 1 :(得分:0)

除了尝试将不同类之间的共性拉到基础上之外,没有其他通用的解决方案。

在您的情况下,由于apply()之间的唯一区别似乎是技能名称,并且您已经将其作为实例属性,因此可以将apply向上拉至{{1 }},并且在Base的所有子类中都具有相同的实现。

Base