在3.5中有一种简单的方法吗?我在.NET 4.0中发现了一种叫做“动态”的东西。
我有一类继承自CrestronControlSystem类的UI。在那里,我希望能够定义 一个未知类型的Panel,然后在方法中实例化。
我不想做拳击/取消装箱,因为
a)每个人都说这很糟糕
b)我必须在我定义和使用所有UI的ControlSystem中转换对象类型。在这一点上,我必须知道每个UI是为了投射它,我不希望这样。
so(XpanelForSmartGraphics)home.UIs [0] .UI_IPID,如果它是通过Boxing / Unboxing的XpanelForSmartGraphics的对象类型。
我在Generics上尝试了很多东西,但是无法按照我想要的方式工作,因为Generics不支持属性......
代码:
public class ControlSystem : CrestronControlSystem
{
..........
public Home home = new Home("Home", 1, 1); // this just defines my home object and takes number of rooms and number of UIs as a parameter
.........
home.UIs[0].DefineUI(0x03, "xpanel", "Study"); // here is where I want to say "this unknow object is now XpanelForSmartGraphics because string parameter = "xpanel"
.........
home.UIs[0].myPanel.BooleanInput[1].BoolValue = true; // here is how I want to use it, so no casting.
}
public class UI : CrestronControlSystem
{
public ?????? myPanel; // how would it be defined ?
.......
public void DefineUI(ushort id, string type, string location)
{
.........
myPanel = ?????? ; // how ? :)
.........
}
}
谢谢
所以这就是我需要的东西,但我希望能够给会员打电话 XpanelForSmartGraphics“正常方式”的运营商。这还是 表现为对象:
public void DefineUI(ushort id, string type, string location)
{
if (type == "xpanel")
{
Type panelType = typeof(XpanelForSmartGraphics);
this.myPanel = Activator.CreateInstance(panelType);
}
}
所以我不能这样从ControlSystem类调用它:
home.UIs[0].myPanel.BooleanInput[1].BoolValue = true;
其中BooleanInput [1] .BoolValue它只是XpanelForSmartGraphics的一个属性
由于
答案 0 :(得分:0)
您可以使用Activator类创建动态实例。 Activator.CreateInstance方法需要创建实例的Type。
Type可以通过硬编码方式提供:
if (type == "xpanel") { return typeof(MyXPanel); }
或者您可以通过Type.GetType方法提供动态类型。
你的衣服可以是这样的:
public class UI : CrestronControlSystem {
public object myPanel;
public void DefineUI(ushort id, string type, string location) {
Type panelType = Type.GetType(type);
this.myPanel = Activator.CreateInstance(panelType);
}
}