为什么我不能把这个方法标记为静态?

本文关键字:记为 静态 方法 不能 为什么 | 更新日期: 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
    }
}