Sim*_* Me 2 c# generics class object abstract
我这边有点问题.我正在使用泛型类,但我不知道从UI面板中选择之前的类型.如何在知道对象之前声明我的对象?所以这是样本
public class UI
{
Agent myAgent;
public UI()
{
}
public void Initialize()
{
if (textBox1.Text == "LabAgent")
myAgent = new Agent<LabState, LabAction>();
else
myAgent = new Agent<FieldState, FieldAction>();
}
}
Run Code Online (Sandbox Code Playgroud)
Agent类是一个简单的泛型类.我怎么能做这样的事情,但实际工作?如何在不知道类型的情况下定义myAgent?注意:我使用的是C#,而不是Java.编辑1:
public class Agent<S,A>
where S : AState
where A : AAction
{
private List<S> states;
private List<A> actions;
private Dictionary<KeyValuePair<S, A>, float> Q;
private S stareCurenta;
public void Initializare()
{
foreach (S s in states)
{
foreach (A a in actions)
{
Q.Add(new KeyValuePair<S, A>(s, a), 32000);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何在不知道类型的情况下定义myAgent?
你不能. Agent<LabState, LabAction>并且Agent<FieldAgent, FieldAction>是完全不同的类型.如果你试图myAgent在另一个方法中使用,你怎么知道它在编译时它是否是一个Agent<LabState, LabAction>或者Agent<FieldAgent, FieldAction>因此编译器如何绑定到任何属性或方法?
您可以拥有非泛型Agent基类,但它不能访问任何通用属性或方法.
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |