2016-09-21 88 views
0

我有一个BaseImageView(平台在这里无关紧要),它有一个属性Effect,这是一个command对象。为什么我不能将此方法标记为静态?

我想我所有的命令都实现了IImageEffect,它有一个static方法ApplyEffect,拍摄图像并返回图像的效果。

但编译器抱怨我无法将接口方法标记为static,但这看起来像逻辑选项(因为没有效果所需的状态信息)。

我问这个,因为我需要100名效果对象1日起适用于100幅不同的图像,而我可以逃脱传递类,并调用静态方法,这将废除了100个实例。

有没有一种方法我可以有一个静态接口,或者我可以传递一个类,并让它调用该类型的静态ApplyEffect

+0

不行,接口成员不能是静态的。如果您称为“IImageEffect.ApplyEffect”,CLR如何知道您想要调用哪个实现? (有与泛型类型参数的静态接口成员的说法,但这是更加微妙。) –

+0

@JonSkeet我会通过一个类来了'Effect'属性,然后调用'ApplyEffect'这个类的,所以它会成为'EffectClass .ApplyEffect'。然后它会知道我想调用它的具体课程。 – vrwim

+2

对不起,如果没有问题*中的具体示例*,这很难理解。如果你只是想要一个总是做同样事情的静态方法,就把它放在一个类中而不是一个接口中...... –

回答

0

我建议你要么让您实现静态方法,比如你想用的界面做一个抽象类。

它可能看起来像这样

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 
{ 

} 

或者创建一个静态类与应用效果,如果你不想从一个抽象类inherrit。

public static class EffectClass 
{ 
    public static void ApplyEffect() 
    { 
     // Effect of awesomeness 
    } 
} 
相关问题