簡體   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