C# 在子类中声明时,如何调用继承的函数来执行

C# 在子类中声明时,如何调用继承的函数来执行,c#,oop,unity3d,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); } } 正如您所看到的,类foreign继承自monobhav

从Unity 3D获取此示例代码

public class Enemy : MonoBehaviour 
{
    void Start()
    {

    }

    void Update()
    {
       transform.postion = Vector3.Lerp(transform.position, new Vector3(0, 1, 0), 5f * Time.deltaTime);
    }
}
正如您所看到的,类
foreign
继承自
monobhavior
,其中包含
Start
Update
方法。我所要做的就是把我自己的代码放在那里,但是,我想知道如何创建一个类似的东西,比如在Java中构建聊天API,我将把它展示给消费者,让他们只访问我的基类,并拥有一个像“Update”这样的函数,它每秒钟执行一次,而不必手动编写while循环


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

基类可以在其构造函数中创建一个计时器,该计时器设置为以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();
    }
}

这对于堆栈溢出来说太宽了。Unity在内部使用(很可能是无法验证)反射来确定是否声明了
Start
和其他方法。不过,c#中没有任何内置功能允许您这样做,也没有只通过声明就可以调用的方法。就像没有什么汽车能仅仅因为它是造出来的就被驱动一样。“在一个方法被调用之前,它不会做任何事情。”ScottHannen是的,我理解你,先生,我认为它是在运行时被Unity调用的。就像JApplet一样,draw()方法每帧调用一次。我想知道的是,这个过程的名称,所以我可以研究它。老实说,这是我在编程中没有学过的东西之一。@Camiloteriento明白了!您可以使用多态性。XNA就是这样做的。Unity选择了清单式系统。在编译时,MonoBehavior脚本会被扫描特定的方法,然后它会以某种方式用实现的方法来标记它们。没有思考。我知道你来自哪里,这个逻辑我可以理解,它非常容易理解。谢谢你的回答。不是每个类都有计时器,而是一个新的类注册到一个经理,然后经理在集合上运行foreach。我同意@Everts。没有深入讨论,只是展示了一个简单的示例,说明如何在特定的时间间隔内调用一个方法,而使用您的框架的人不需要编写代码。