2016-09-21 111 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 
    } 
} 
相關問題