向现有的函数添加参数

本文关键字:添加 参数 函数 | 更新日期: 2023-09-27 18:11:09

这是一个有点棘手的问题,我不知道是否可能。

假设我在DLL中有一个类Foo1,我不能修改它。该类看起来像这样:

public class Foo1<T1> : IFoo<T1>
{
    public Foo1(Func<IFoo, T1, T1> postRead);
}

我想继承Foo1,并能够在原始postRead中注入T2对象,并在基础postRead中访问它。

像这样:

public class Foo2<T1, T2> : Foo<T1>
{
    public Foo2(Func<IFoo, T1, T2, T1> newPostRead)
        :base(Func<IFoo, T1, T1> secondPostRead)
    {
    }
}

有可能吗?

编辑:

我用的是insight DB。这是一个ORM。有一个功能是后期处理。代码看起来像这样:

public class PostProcessRecordReader<T> : RecordReader<T>
{
    public PostProcessRecordReader(Func<IDataReader, T, T> postRead);
}
//How to use the processor 
public DummyFunction(ObjectIWantToUse objectIwantToUse)
{
    PostProcessRecordReader<Foo> _postProcessorForCubeWithAllEntitiesForBuilding = new PostProcessRecordReader<Foo> (reader, obj) =>
        {
            //Need to have access objectIwantToUse !!!

            //maybe I want to modify obj or add some stuff to it
        }
    );
    //Do some stuff by using _postProcessorForCubeWithAllEntitiesForBuilding
}

我们可以通过直接访问读取器对从DB返回的对象进行一些处理。

向现有的函数添加参数

Foo1<T1>接受一个有两个T1形参的函数,并返回一个IFoo<T1>。I假定Foo1 在某个时刻调用该函数。

你想传递给它一个函数,它接受两个T1参数一个T2参数。问题是- Foo1不知道关于T2的任何 -所以它应该如何知道要传递什么?

现在Foo2知道T2,但必须以某种方式将信息传递给T1。它可以将原始函数映射为具有更少参数的函数,但它必须有某种知道T2应该是什么的解析器:

public class Foo2<T1, T2> : Foo1<T1>
{
    public Foo2(Func<IFoo<T1>, T1, T2, T1> newPostRead, Func<T2> resolver)
        :base((IFoo<T1> t1a, T1 t1b) => newPostRead(t1a, t1b, resolver() ))
    {
    }
}

它至少会编译,但从你的描述中不清楚这是否是一个可行的解决方案。