我如何编写一个可以调用的函数(如果存在),但是如果不存在则不会抛出错误(并被忽略)?

时间:2019-07-27 19:09:20

标签: c#

可以说我有一个名为Component的抽象类。组件具有三个功能:Start(),Update(float timeStep)和Draw()。 我不希望每个继承Component的类都使用全部三个功能。

我当然可以将所有函数写出来(编辑为澄清:作为覆盖函数,而基本函数是虚拟的),只返回了其中的语句,但是对于继承Component的每个类来说,这样做都是很不方便的。另外,我已经看到它按我想要的方式做过。

例如,在Unity中,可以完全继承继承MonoBehaviour的类中的Update和Start函数,而不会出现任何问题!如果找不到该函数,Unity将忽略它。

我该如何为自己做到这一点?预先感谢!

2 个答案:

答案 0 :(得分:1)

您需要了解该解决方案的两个关键字:

  1. Virtual可以覆盖,但不是必需的。
  2. abstract必须被覆盖。

请看下面的示例代码以更好地理解。

public abstract class BaseClass
{
    public abstract void MustOverride(); // It must be overriden

    public void NoNeedOverride()
    { 
        // logic goes here
    }   // No need to override

    public virtual void CanBeOverride()
    {
        // logic goes here
    }   // Not necessarily be overriden
}

public class DerivedClass : Base
{
}

答案 1 :(得分:0)

您可以编写一个带有Start()的基类,并编写一个具有Update()和Draw()的子类。根据情况,您继承表单基类或基类的子代。

如果项目不太复杂,这应该可以解决问题。