我有两个类Say A和B,它有方法set()。
public Class A : I<string>
{
void Set(string str)
{
//do something
}
}
public Class B : I<int>
{
void Set(int str)
{
//do something
}
}
接口如下......
interface I<T>
{
void Set(T param);
}
我想在没有通过接口实例化类的情况下访问此方法(可能还是有其他方式,如依赖注入?)。
来自另一个班级
Class D
{
I.Set(<T> str); //something like this
}
所以基于数据类型我需要从任一接口或某些地方重定向调用,所以如果明天我添加了一个实现相同接口的C类,我不应该在D中更改代码。
提前致谢...
答案 0 :(得分:4)
接口有点像实现类提供的方法模板。你不能做任何事情&#34;有一个界面。您始终需要实现该接口的类的实例。
所以你想要的东西不起作用。但是,一个简单的扩展方法将帮助您:
public static class MyExtensionMethods
{
public static void SetValue<T>(this I<T> intf, T value)
{
intf.Set(value);
}
}
使用此功能,您可以写:
A a = new A();
B b = new B();
b.SetValue("Hello");
a.SetValue(1);
它可以用于实现I<T>
的任何其他类,而无需更改扩展方法:
public class D : I<double>
{
public void Set(double d) { ... }
}
D d = new D();
d.SetValue(42.0);
答案 1 :(得分:0)
您需要传递某些内容,所以此刻,我最好的猜测是
class D
{
public void Set<T>(object target, T value)
{
var instance = target as I<T>;
if (instance != null)
{
instance.Set(value);
}
}
}
叫做:
var theD = new D();
var theA = new A();
var theB = new B();
theD.Set<string>(theA, "hello");
theD.Set<int>(theB, 1);