У меня есть интерфейс:
public interface IA<T>
{
T fce1(float[] data);
byte[] fce2(T arg);
}
и у меня есть его реализация, которая указывает определенный T (поэтому реализации больше ничего не нужно):
public class A : IA<float>
{
public float fce1(float[] data)
{
return 1f;//data processing
}
public byte[] fce2(float arg)
{
return BitConverter.GetBytes(arg);//some kind of serialization
}
}
Класс A находится в .dll, и я хочу получить его и вызвать fce2 (fce1()) (поэтому не должно быть неизвестного аргумента или типа. Я хочу сделать что-то следующее:
var data = File.ReadAllBytes("a.dll")
var assembly = Assembly.Load(data);
var expTypes = assembly.GetExportedTypes();
foreach (var d in assembly.GetExportedTypes())
{
var obj = Activator.CreateInstance(d);
if (obj is IA)
{
var kernel = obj as IA;
kernel.fce2(fce1());
}
}
Цель состоит в том, чтобы запустить fce1 как одну задачу позже, а fce2 как вторую задачу, когда fce1 предоставит результат (это упрощенная ситуация).
Я пробовал это с .NET 4.7
Я знаю, что это можно сделать, чтобы вернуть объект из fce1, а затем привести внутри fce2 объект к нужному типу и обработать его? Но единственный ли это способ? Я хочу избежать кастинга.
fce2(fce1(float[]))
возвращаетbyte[]
. Это не общее. Напишите неуниверсальный базовый интерфейс с помощью методаbyte[] fc2fc1(float[])
. Приведите новый экземпляр к этому. Или вы имели в виду, чтоT fce1(float[] data);
будетT fce1(T[] data);
? - person 15ee8f99-57ff-4f92-890c-b56153   schedule 18.09.2019