2011-05-09 33 views
2

我試圖選擇一個名,通過我可以通過一些成像對象的接口:INeedSomething更好的名字...?

  • 如果對象是INeedX然後SETX(一些x)的方法將被調用;
  • 如果對象是INeedY,則調用SetY(some y)方法;
  • 等等。 (有趣的是地獄,我知道:))

我試圖找到這種接口,一個不同的名字,但我不知道這一點。

有沒有人有一個想法如何命名INeedSomething接口?

+0

所有類都需要自己的基類,他們實現的接口。你的問題很模糊,試着舉個例子。 – jgauffin 2011-05-09 07:38:22

+4

接口的名稱應該描述對象可以執行的功能或功能,而不是描述該對象所需的數據的具體細節。這是一個實現細節,在接口名稱中沒有業務。 – MattDavey 2011-05-09 07:50:36

+3

這聽起來不像一個界面。而且你很難命名它也可能表明你選擇了錯誤的工具。你能否擴展這個問題試圖解決你的問題?此外,如果它只是一個命名問題,你可以發佈實際代碼的用法(現在堅持使用INeedSomething)嗎? – 2011-05-09 07:58:37

回答

1
public interface INeed<T> 
{ 
    public T SetValue { set; } 
} 

通過使用泛型,通過你的接口傳遞的類型後面定義,這樣的:

class Needy : INeed<int> 
{ 
    private int internalValue; 
    public int SetValue { set { 
    internalValue = value; 
    } }; 
} 
+0

我並不是指INeedSomething的實現,並且實現不能是泛型的,因爲相同類型可能意味着很多事情,例如:INeed 可能表示INeedUserId,INeedTimeout或其他可以是int的值。 – 2011-05-09 07:53:57

+0

如果你有這樣的班級,這將不起作用:'類需要:INeed ,INeed '。實際上,如果您明確定義成員並將其包裝在每個類的公共屬性中,這可以工作。在使用其類變量聲明或其接口變量聲明來消費類時可能有點奇怪 – 2011-05-09 07:54:03

3

什麼名字IDependsOn您接口(又名IDependsOnUserId,IDependsOnTimeOut。)

2

那麼,INeed接口可能是一個尷尬的設計的跡象。在我看來,你真正想要的是依賴注入,這是代碼等價的說明一個對象需要另一個對象的功能。因此不是

class Car:INeed<Engine> { 
    public Set(Engine engine) 
} 

,也許你真正想要的是

class Car { 
    public Car(Engine engine) 
} 

如果我是你,我會嘗試看看上面是適合你的情況,這是一個更標準的方法聲明需求/依賴關係

+0

但是,我同意如果構造函數注入不可能,可以使用屬性注入。 – 2011-06-21 08:22:16

0

IRequire聽起來更好,但是,對於此接口的使用似乎是錯誤的。

使用屬性來代替:

class MyClass 
{ 
    [Required] 
    double X 
    { 
     get; 
     set; 
    } 
}