2009-12-21 94 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