繁体   English   中英

向现有功能添加参数

[英]Add a parameter to an existing Func

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

假设我有一个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)
    {
    }
}

可能吗?

编辑:我正在使用洞察数据库 这是一个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
}

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

Foo1<T1>采用具有两个T1参数的函数,并返回IFoo<T1> 我假设Foo1在某个时候调用了该函数。

您想要传递给它一个带有两个T1参数一个T2参数的函数。 问题是Foo1T2 一无所知 -那么它应该如何知道传入的内容呢?

现在, 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() ))
    {
    }
}

它至少会编译 ,但是从您的描述中尚不清楚这是否可行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM