2009-12-21 186 views
0

我有2個應用程序:名爲ClLib的類庫和名爲ClLibApp的Windows Form Application。C#方法和命名空間問題

在ClLib中,我有一組類。

它們如下所示:

新加坡(父類) - 幼兒園 - 主要 - 中學

在ClLibApp,我需要添加從ClLib參考,這樣我可以用我的應用。編碼如下所示。

新加坡

namespace ClLib.Singapore 
{ 
    public class SingaporeClass 
    { 
     public int subtract(int firstNum, int secNum) 
     { 
      return firstNum - secNum; 
     } 
    } 
} 

苗圃

namespace ClLib.Singapore.Nursery 
{ 
    public class ExchangeClass 
    { 
     public int subtractionNursery(int firstNum, int secNum) 
     { 
      return firstNum - secNum; 
     } 
    } 
} 

主要

namespace ClLib.Singapore.Primary 
{ 
    public class ExchangeClass 
    { 
     public int subtractPrimary(int firstNum, int secNum) 
     { 
      return firstNum - secNum; 
     } 
    } 
} 

二次

namespace ClLib.Singapore.Secondary 
{ 
    public class ExchangeClass 
    { 
     public int subtractSecondary(int firstNum, int secNum) 
     { 
      return firstNum - secNum; 
     } 
    } 
} 

我不想把方法都在同一個班,這意味着我會希望有,而不是隻有1次類中包含的所有方法3個不同的子類。

在我ClLibApp

所以,我創建了一個按鈕,並需要有一個指令,讓我顯示如下:使用ClLib.Singapore

; 使用ClLib.Singapore.Nursery; 使用ClLib.Singapore.Primary; 使用ClLib.Singapore.Secondary;

舉例來說,我創建了一個名爲btnExchange的按鈕,它將顯示不同方法的答案。我想一個方法來創建它在某種程度上是這樣的:

private void btnExchange_Click(object sender, EventArgs e) 
{ 
    ExchangeClass ExchClass = new ExchangeClass(); 
    string answer = ExchClass.subtract(99,88).ToString(); 
    MessageBox.Show(answer);   

} 

在第二行中,我希望能夠用

string answer = Exch.subtractNursery(100,694).ToString(); 
string answer = Exch.subtractPrimary(8484,38).ToString(); 
string answer = Exch.subtractSecondary(39, 764).ToString(); 

我需要以此爲指導,我一直在努力解決這個問題只有幾天,但無濟於事。

+0

請提供更多詳細信息,最好使用一些僞代碼來顯示您想如何使用結果代碼。 – 2009-12-21 17:37:34

回答

0

有很多可能的解決方案,但我沒有看到你打算如何選擇正確的答案。

你可以使用擴展方法:

namespace ClLib.Singapore.Primary 
{ 
    public static class ExchangeExtensions 
    { 
    public static int subtractPrimary(ClLib.Singapore.SingaporeClass @this, int firstNum, int secNum) 
    { 
     return firstNum - secNum; 
    } 
    } 
} 

或者,你可以使用一般的面向對象的設計思想。如果你在網絡上觀看,有各種各樣的教程。你會想要接口繼承或類繼承。 (有了類繼承,我認爲新加坡類是基礎,其他類是子類。)

如果沒有那些解決您的需求,思考可能是你需要的答案。有很多方法可以使用,所以你需要更準確地描述你的目標。 (也許寫一些僞代碼到這個問題。)

+0

那麼我應該在ClLibApp中編輯什麼?你能解釋更多關於你的解決方案嗎?我對此不清楚。 – user231785 2009-12-21 05:09:51

+0

我們仍然不知道你想要達到的目標,因此根據定義,我們的答案不清楚,模糊的建議。 – 2009-12-21 17:36:57

1

什麼像這樣使用泛型:

在你CILib裝配:

public interface IExchangeClass 
{ 
    int Subtract(int firstNum, int secNum); 
} 

public class SingaporeClass : IExchangeClass 
{ 
    public int Subtract(int firstNum, int secNum) 
    { 
     return firstNum - secNum; 
    } 
} 

public class NurseryClass : IExchangeClass 
{ 
    public int Subtract(int firstNum, int secNum) 
    { 
     return firstNum - secNum; 
    } 
} 

public class PrimaryClass : IExchangeClass 
{ 
    public int Subtract(int firstNum, int secNum) 
    { 
     return firstNum - secNum; 
    } 
} 

public class SecondaryClass : IExchangeClass 
{ 
    public int Subtract(int firstNum, int secNum) 
    { 
     return firstNum - secNum; 
    } 
} 

public class ExchangeHelper 
{ 
    public int Subtract<T>(int firstNum, int secNum) where T : IExchangeClass, new() 
    { 
     T exchange = new T(); 

     return exchange.Subtract(firstNum, secNum); 
    } 
} 

然後在你的ClLibApp你可以做這樣的事情:

ExchangeHelper helper = new ExchangeHelper(); 

string answer = helper.Subtract<SingaporeClass>(10, 4).ToString(); 
// or string answer = helper.Subtract<NurseryClass>(10, 4).ToString(); 
// or string answer = helper.Subtract<PrimaryClass>(10, 4).ToString(); 
// or string answer = helper.Subtract<SecondaryClass>(10, 4).ToString(); 

return answer; 
+0

嗨,我知道這隻適用於具有相同名稱的方法(在我們的例子中它是減法)。但是如果我有不同的方法名稱,我該怎麼辦? – user231785 2009-12-24 02:08:11

+0

這是「分類」策略模式的實現。方法名稱可以相同,但執行不同的任務。例如,該方法可能只是「PerformOperation」,根據實現接口的類,「操作」可能是Add,Subtract,Multiply等。請參閱這裏以獲取良好的C#策略模式示例==> http:// www.c-sharpcorner.com/UploadFile/rmcochran/strategyPattern08072006095804AM/strategyPattern.aspx – WayneC 2009-12-28 06:55:53