C#方法&名称空间问题

时间:2009-12-21 04:44:20

标签: c# methods namespaces

我有2个应用程序:名为ClLib的类库和名为ClLibApp的Windows窗体应用程序。

在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;
        }
    }
} 

我不想将方法全部放在同一个类中,这意味着我希望有3个不同的子类,而不是只有1个子类来包含所有方法。

所以在我的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();

我需要这方面的指导,我一直试图解决这个问题几天但无济于事。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

有许多可能的解决方案,但我不知道你打算如何选择正确的答案线。

您可以使用扩展方法:

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

或者,您可以使用一般的面向对象设计思想。如果你环顾网络,有各种各样的教程。您可能需要接口继承或类继承。 (使用类继承,我会假设SingaporeClass是基类,其他是子类。)

如果这些都不能满足您的需求,那么反思可能是您需要的答案。它有很多种方法可供使用,因此您需要更准确地描述您的目标。 (也许在问题中写一些伪代码。)