我有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();
我需要这方面的指导,我一直试图解决这个问题几天但无济于事。
答案 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是基类,其他是子类。)
如果这些都不能满足您的需求,那么反思可能是您需要的答案。它有很多种方法可供使用,因此您需要更准确地描述您的目标。 (也许在问题中写一些伪代码。)