访问动态创建的子类的属性(强类型)

时间:2014-04-08 15:17:21

标签: c# inheritance reflection

这似乎是一种可能经常出现的模式,所以我想也许有人知道这是怎么做的。假设我有三个类:

class Class1 {
    string A { get; set; }
}
class Class2 : Class1 {
    string B { get; set; }
}
class Class3 : Class1 {
    string C { get; set; }
}

字符串:x = "Namespace.Class2";

目标是库代码实例化由x给出的类型的实例,该实例被提供给客户端。然后客户端访问Class2的强类型属性,如下所示:

Class2 test = CreateTheObject();
test.B = "bad wolf";
test.A = "super";

我们可以反映属性,但这不是强类型的。用户可以执行GetProperty(Class2,“SomePropertyThatDoesntExist”)。它最终可能会引发运行时异常,但这是一种糟糕的用户体验。这是我现在正在编码的解决方案,因为我无法弄清楚如何做我想做的事。

无论如何,关于这个问题:不知道如何做到这一点?

1 个答案:

答案 0 :(得分:1)

如果有问题的类型在编译类型中未知,则不能强类型化。如果你在编译时知道类型,你可以只分配或转换为该类型。

您可以使用dynamic关键字来执行您想要的操作。但是,由于在编译时不知道该类型,如果使用的某些其他类型没有相关属性,则会冒运行时错误。