如何在子类中声明时调用Inherited函数来执行

时间:2018-02-11 02:19:46

标签: c# oop unity3d

从Unity 3D中获取此示例代码

public class Enemy : MonoBehaviour 
{
    void Start()
    {

    }

    void Update()
    {
       transform.postion = Vector3.Lerp(transform.position, new Vector3(0, 1, 0), 5f * Time.deltaTime);
    }
}

如您所见,课程Enemy继承自MonoBehavior,其中包含StartUpdate方法。我所要做的只是在那里放入我自己的代码,但是,我想知道如何创建一个类似的东西,例如用Java构建一个Chat API,我会把它放到消费者那里来访问我的基类,并且将具有像“Update”这样的函数,每秒执行一次,而不必手动编写while循环。

如何创建可在子类声明时自动调用的基类函数?我对任何人都可以回答的编程语言持开放态度,我想知道的是这背后的逻辑。

1 个答案:

答案 0 :(得分:1)

基类可以在其构造函数中创建一个计时器,该计时器设置为以1s间隔调用抽象方法。

public abstract class BaseClass
{
    private Timer _timer;

    protected BaseClass()
    {
        _timer = new Timer();
        _timer.Tick += (sender, args) => 
       {
          Console.WriteLine("Calling Update."); 
          Update();
       };
        _timer.Interval = 1000;
        _timer.Start();            
    }

    protected abstract void Update();
}

public class InheritedClass : BaseClass
{
    protected override void Update()
    {
        Console.WriteLine("Update was called.");
    }
}

您可以在控制台应用中使用它来演示功能。

public class Program
{
    public static void Main(string[] args)
    {
        var inheritedClass = new InheritedClass();
        Console.ReadLine();
    }
}