为什么我不能把这个方法标记为静态?
本文关键字:记为 静态 方法 不能 为什么 | 更新日期: 2023-09-27 18:07:59
我有一个BaseImageView(平台在这里无关),它有一个属性Effect
,这是一个命令对象。
我希望我的所有命令都实现IImageEffect
,它具有static
方法ApplyEffect
,获取图像并返回具有效果的图像。
但是编译器抱怨我不能将接口方法标记为static
,但这似乎是合乎逻辑的选项(因为效果不需要状态信息)。
我问这个问题是因为我需要100个效果对象来对100个不同的图像应用1个效果,而我可以通过传递类并调用静态方法来逃避,这将取消100个实例。
是否有一种方法,我可以有一个静态接口,或者一种方法,我可以传递一个类,并让它调用该类型的静态ApplyEffect
?
我建议您创建一个抽象类,在其中实现静态方法,就像您想要对接口做的那样。
可以是这样的
class Program
{
static void Main(string[] args)
{
BaseImageView.ApplyEffect();
// Or
EffectClass.ApplyEffect();
}
}
public abstract class EffectClass
{
public static void ApplyEffect()
{
// Effect of awesomeness
}
}
public class BaseImageView : EffectClass
{
}
或者创建一个静态类来应用这个效果,如果你不想从抽象类继承。
public static class EffectClass
{
public static void ApplyEffect()
{
// Effect of awesomeness
}
}