2010-08-29 115 views
0

我有一个.Net库。说2个公共职能。说一个是Summmator它需要2个参数,并且确实A+B。另一个函数simpleMultiplicator需要2个参数:一个数字要乘以它的倍数和次数。 A调用时使用Summmator函数。所以这是我的图书馆。它被编译为.net4的dll。在我的程序中,我想扩展或修改Summator函数,这样当我调用simpleMultiplicator时,它将使用我对原始Summator函数的修改。 .net4中可以做到这一点吗?在这种情况下可以从库扩展功能吗?

(C#,视觉C++)

回答

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

此致 奥利弗Hanappi

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 
    } 

然后创建另一个构造函数,你可以覆盖默认的加法:如果你想改变求和函数,创建一个新的基于加法级

public SimpleMultiplicator(Summator summator) 
    { 
    this.summator = summator; 
    } 

所以,覆盖它的sum()方法并将其传递给SimpleMultiplicator构造器。

相关问题