我有一个.Net库。说有2个公共职能。假设一个是Summmator
,它接受2个参数并且A+B
。另一个函数simpleMultiplicator
,它带有两个参数:一个乘数的数字和它应该被乘的次数。调用simpleMultiplicator
函数时使用Summmator
函数。所以这是我的图书馆。它被编译成.net4的dll。在我的程序中,我想扩展或修改Summator函数,这样当我调用simpleMultiplicator时,它将使用我对原始Summator函数的修改。在.net4中是否可以,怎么做?
(C#,visual-C ++)
答案 0 :(得分:1)
首先,我将这些东西客观化。所以你有一个提供和函数的Summator,以及一个提供乘法函数的SimpleMultiplicator。然后,在默认情况下将Summator添加到SimpleMultiplicator。例如,
class SimpleMultiplicator
{
public SimpleMultiplicator()
{
this.summator = new Summator();
}
public int Mult(int a, int b)
{
// ...
this.summator.sum(something, somethingelse);
// etc
}
然后你创建另一个构造函数,你可以覆盖默认的Summator:
public SimpleMultiplicator(Summator summator)
{
this.summator = summator;
}
因此,如果要更改求和函数,可以创建一个新的基于Summator的类,覆盖其sum()方法并将其传递给SimpleMultiplicator构造函数。
答案 1 :(得分:1)
这取决于你如何设计你的课程。您声明您的库导出了两个公共函数,但它们需要在类上定义为静态或实例方法,因此您可以使用面向对象的原则(如继承或多态)来实现您想要的。
以下是使用继承的示例:
namespace MyLibrary
{
public class MyMath
{
// Be aware of the virtual keyword which enables overriding the method
public virtual int Summmator(int a, int b)
{
return a + b;
}
public int SimpleMultiplicator(int a, int b)
{
int result = 0;
for (int i = 0; i < b; i++)
{
result = Summmator(result, a);
}
}
}
}
namespace MyProgram
{
using MyLibrary;
public class MyExtendedMath : MyMath
{
public override int Summmator(int a, int b)
{
return a + 2 * b;
}
}
public static class Program
{
public static void Main()
{
MyMath math = new MyExtendedMath();
int result = math.SimpleMultiplicator(2, 3);
Console.WriteLine(result);
}
}
}
另一种方法是使用多态:
namespace MyLibrary
{
public interface ISummmator
{
int Summmator(int a, int b);
}
public class Summmator : ISummator
{
public int Summmator(int a, int b)
{
return a + b;
}
}
public static class MyMath
{
public static int SimpleMultiplicator(int a, int b, ISummmator summmator)
{
int result = 0;
for (int i = 0; i < b; i++)
{
result = summmator.Summmator(result, a);
}
}
}
}
namespace MyProgram
{
using MyLibrary;
public class MySummmator : ISummmator
{
public int Summmator(int a, int b)
{
return a + 2 * b;
}
}
public static class Program
{
public static void Main()
{
int result = MyMath.SimpleMultiplicator(2, 3, new MySummmator());
Console.WriteLine(result);
}
}
}
最诚挚的问候, Oliver Hanappi