c#在参考库中覆盖方法

c#在参考库中覆盖方法,c#,dll,overriding,.net-assembly,C#,Dll,Overriding,.net Assembly,我正在编写一个应用程序来检查数据库中的一些数据(数据库不断更新)。 为了从数据库中获取数据,我使用了另一个团队编写的汇编(.dll文件)(我无法获取/更改.dll文件的代码) 我想用我自己的数据(极端数据)对我的算法/程序进行“压力测试”,我不能更改数据库。 简化的代码示例: public partial class Form1 : Form { public Form1() { InitializeComponent(); } //ti

我正在编写一个应用程序来检查数据库中的一些数据(数据库不断更新)。 为了从数据库中获取数据,我使用了另一个团队编写的汇编(.dll文件)(我无法获取/更改.dll文件的代码)

我想用我自己的数据(极端数据)对我的算法/程序进行“压力测试”,我不能更改数据库。 简化的代码示例:

    public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    //timer1.Interval = 10000
    private void timer1_Tick(object sender, EventArgs e)
    {
        DataTable values = someLib.GetData(DateTime.Now.AddDays(-1),DateTime.Now);
        CheckData(values); //checking the data form the DB, I want to "stress test" this function/logic.

    }
}
我希望someLib.GetData函数返回一个特定的数据(用于检查我的程序)。 我可以编写一个新函数,返回与someLib.GetData相同的DataTable(相同的列等),但对于我自己的数据,问题是这个解决方案需要手动检查GetData的所有出现(以及更多从数据库获取数据的函数)并手动更改它们。 我正在寻找一些系统的方法来解决这个问题。 我想到的另一种方法是删除引用并“修复”所有错误,问题是我在前面提到的库中使用了很多函数,我仍然需要这些函数

我的问题是,有没有办法从我没有代码的程序集中重写/禁用函数(甚至整个类)

多谢各位

编辑:方法不是虚拟的。

这个解决方案怎么样(如果我正确理解了问题):

公共类MyLib{
公共SomeLib SomeLib{get;set;}
公共MyLib(SomeLib SomeLib){
this.someLib=someLib;
}
需要(…)的某个库的公共无效方法{
返回someLib.methodfromSomelib,这是必需的(…);
}
//…对于SomeLib中使用的任何方法,都是如此
公共数据表getData(){
//SomeLib方法的我自己的实现
}
}
而您所需要的只是将SomeLib实例的声明更改为MyLib实例,即代替

SomeLib-SomeLib=new-SomeLib();
用这个

MyLib-someLib=new-MyLib(new-someLib());

因此,您无需在任何地方更改
someLib
的名称,只需在
MyLib
中实现这些方法,您需要从
someLib

“是否有任何方法从我没有代码的程序集中重写/禁用函数(甚至整个类)?”--您是否拥有代码不是问题所在。问题是您要覆盖的内容是否是虚拟的。如果不是,那么不是。也就是说,这是一个。您真正想问的是如何模拟数据库。这个问题太宽泛了,不适合在这里讨论,但请看。当然,它被称为继承。如果图书馆允许的话,你也可以使用这些方法。也许我应该提到(我会编辑文章),这些方法不是虚拟的。关于数据库,你是对的,这是一个XY问题。这是因为这是关于我使用的系统的简化信息。它不仅仅是一个数据库,而是一个生成数据(在线)的庞大系统,检查数据并将其写入数据库。我已经检查了不需要我更改代码的解决方案(当然我更喜欢),不幸的是,没有简单的方法模拟数据库/数据生成程序/系统中的任何其他内容。@Alexander我可以从基类继承,但它仍然留下了基方法问题。我的问题是,在我的程序中有很多对GetData(和更多方法)的调用。如果我想创建一个新方法(无论是否从基类继承),我需要手动搜索对基类方法的所有调用并对其进行更改。这让我可以选择“错过”一些调用,我需要一种方法来覆盖(这意味着,对基类的调用将进入我的编程方法)或禁用基类(并修复所有错误)。@Alexander hidingThank,这是一个正确方向的良好开端。也就是说,在我使用的库中,Somelib是一个静态类。在对实际程序进行最小更改的情况下处理这种情况,有什么想法吗?(我不介意像你建议的那样添加更多的代码/类)。我不明白你需要什么。您有一个经常在代码中使用的第三方库,您想用自己的方法更改某些方法的结果,而不需要您的任何操作?怎么可能?也许您应该重新考虑您的问题,并给出更多的代码和解释您希望实现什么?在自己的代码中实现第三方LIB有时需要使用Facade、Proxy或Adapter模式。但所有这些都需要开发人员采取一些行动。。。