2017-03-17 39 views
-1

假設我正在做一個utils的圖書館,並在其他的事情,我有它涉及鍵輸入一個類:我可以在c#中將枚舉複製到另一個名稱空間嗎?

public class KeyInput { 

    ... 

    public bool IsKeyPressed(Keys key) { 
    // determine and return whether that key is pressed 
    } 

    ... 

} 

鑰匙枚舉是在標準庫,但我試圖使這個庫,以便用戶不必觸及它之外的任何東西,包括標準庫(如果可以的話)(或者至少不要做這些utils的用途)。我可以使用Enum.TryParse(),並且讓用戶根據他們想要的鍵輸入一個字符串,但如果我實際上可以擁有它的枚舉,那將更加可取。我真正想要的是System.Windows.Forms.Keys的一個副本,它有一個隱式轉換,或者可以採用某種方式使其成爲當有人使用我的名稱空間時,它包含System.Windows.Forms.Keys枚舉。有沒有辦法做到這一點(或有效的相同)?

+6

我很困惑爲什麼有人使用你的庫不能簡單地使用System.Windows.Forms.Keys如果他們需要它。 –

+1

鍵入,from _where_?在這種努力避免使客戶端代碼引用'System.Windows.Forms.dll',你是否也徹底改造了消息循環,鍵盤輸入處理等?如果是這樣,那麼爲什麼不直接定義你自己的'enum'類型,特別適合你自己的實現呢?如果沒有,那麼你的客戶端的代碼仍然有對該DLL的引用,你可以使用'Keys'枚舉。你在這裏試圖解決什麼_problem?你的問題沒有太大的意義。 –

+0

正如@DavidGreen所指出的那樣,用戶可以使用'System.Windows.Forms.Keys',但我的目標是使它在導入我的名字空間時不需要爲我的庫導入任何其他內容功能齊全。正如@PeterDuniho所說,我可以創建自己的專用枚舉,但這是很多輸入,甚至更多的是從'System.Windows.Forms.Keys'進行轉換(我需要的是因爲我的輸入類監聽關鍵事件從窗體)。 – Anonymous

回答

0

我還不能評論,所以把它放在這裏。 我明白你爲什麼希望將它放在你的類/名稱空間代碼中,這樣當有人使用它時,他們不必包含任何其他的使用。

檢查是否有一個包含或使用您的命名空間中聲明,在這裏看到的差異:Should 'using' statements be inside or outside the namespace?

也許包括所有的功能在這個類轉換,這樣,如果最終用戶需要使用它,所有的功能處理裏面你的課。

幾個選項:

  1. 所以把所有的轉換和功能,用戶可以需要內部類,使用它幾乎像一個包裝。從而擊敗了用戶包括另一個庫的需要。
  2. 讓班級輸出枚舉,然後如果用戶使用var output = className.func();,他們不應該包含該庫。
相關問題