我正在尝试公开这样的 API,我执行以下操作
RegisterCallback<T>(Action<T> func)
{
someObj.FuncPointer = func;
}
稍后,我调用 func(obj) .. 并且 obj 是用户所说的 T 类型。
更具体的例子:
var callbackRegistrar = new CBRegistrar();
callbackRegistrar.RegisterCallback<ISomeClass>(SomeFunc);
public static void SomeFunc(ISomeClass data)
{
//
}
编辑:所以我可能不清楚,所以我将添加更多代码:
我只想制作 CBRegistrar 的“一个”对象,并将其与许多回调连接,如下所示:
var callbackRegistrar = new CBRegistrar();
callbackRegistrar.RegisterCallback<ISomeClass>(SomeFunc);
callbackRegistrar.RegisterCallback<ISomeOtherClass>(SomeFunc2);
...
事实上,上面的代码是通过反映插件目录来调用的。
用户将其放入他们的代码中 -->
public static void SomeFunc(ISomeClass data)
{
//
}
public static void SumFunc2(ISomeOtherClass data)
{
//
}
在我看来,这似乎是不可能使用泛型等的。看起来我可能需要做的是创建一个名为 IPlugin 或其他东西的接口,并要求用户执行此操作..
[PluginIdentifier(typeof(ISomeClass))]
public static void SomeFunc(IPluginData data)
{
var castedStuff = data as ISomeClass; // ISomeClass inherits from IPluginData
}
似乎要求用户做我们应该照顾的事情,但无论如何......