创建可在C#中的派生类中重写的静态行为

时间:2017-06-30 06:32:51

标签: c# oop inheritance design-patterns

以下是具体情况:我有一个基本抽象类Effect,它包含一些在所有类型的效果中共享的行为。然后我有几个从Effect继承的派生类。

我想要像

这样的东西
public static virtual Effect CreateEffect(GameObject obj)
{
    if (!IsCreateable()) {
        return;
    }

    //Otherwise create the effect
}

public static virtual bool IsCreateable()
{
    //Some generic logic common amongst all Effects
}

然后在派生类中,其中一些需要一些额外的自定义逻辑

public static override bool IsCreateable()
{
     if (custom logic) {
         return false;
     }

     return base.IsCreateable()
}

显然这是不可能的,因为c#不支持静态虚函数。我想要一种方法在类之间共享这个静态代码,而不必重写代码。我无法将其作为实例方法,因为在这种情况下,代码将用于决定是否首先创建实例。

一般来说,你如何拥有类型级别的函数(不需要实例),其默认行为可以在C#中被覆盖或修改?

假设此行为与构造函数不同(例如,在Unity3D中,您无法使用构造函数来实例化Monobehaviors)。

1 个答案:

答案 0 :(得分:0)

您可以使用new关键字。它不像压倒一样干净但是完成工作:

public class Effect
{
    public static Effect CreateEffect()
    {
        if (!IsCreateable())
        {
            return null;
        }

        return new Effect();
        //Otherwise create the effect
    }

    public static bool IsCreateable()
    {
        //Some generic logic common amongst all Effects
        return true;
    }
}

public class Effect2 : Effect
{
    public new static Effect2 CreateEffect()
    {
        if (!IsCreateable())
        {
            return null;
        }

        return new Effect2();
        //Otherwise create the effect
    }

    public new static bool IsCreateable()
    {
        //Some generic logic common amongst all Effects
        return true;
    }
}