以下是具体情况:我有一个基本抽象类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)。
答案 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;
}
}