以下代码刚刚组成,这可能与C#有关吗?
class A
{
public int DoStuff()
{
return 0;
}
}
class B
{
public string DoStuff()
{
return "";
}
}
class MyMagicGenericContainer<T> where T : A, B
{
//Below is the magic <------------------------------------------------
automaticlyDetectedReturnTypeOfEitherAOrB GetStuff(T theObject)
{
return theObject.DoStuff();
}
}
答案 0 :(得分:6)
你的愿望就是我的命令。
public interface IDoesStuff<T>
{
T DoStuff();
}
public class A : IDoesStuff<int>
{
public int DoStuff()
{ return 0; }
}
public class B : IDoesStuff<string>
{
public string DoStuff()
{ return ""; }
}
public class MyMagicContainer<T, U> where T : IDoesStuff<U>
{
U GetStuff(T theObject)
{
return theObject.DoStuff();
}
}
如果你想减少耦合,你可以选择:
public class MyMagicContainer<U>
{
U GetStuff(Func<U> theFunc)
{
return theFunc()
}
}
答案 1 :(得分:2)
最终调用automaticlyDetectedReturnTypeOfEitherAOrB()的方法必须知道返回类型。除非你使方法返回对象。然后调用方法可以返回任何内容(int或string)并找出如何处理它。
另一个选择是做这样的事情: (抱歉,我没有打开VisStudio来验证语法或它是否正常工作)
R GetStuff<R>(T theObject)
{
return (R)theObject.DoStuff();
}
void Method1()
{
int i = GetStuff<int>(new A());
string s = GetStuff<string>(new B());
}