这似乎是一种经常出现的模式,所以我想so上的某个人可能知道这是如何做到的。假设我有三个类:
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,"SomePropertyThatDesntExist")。它最终可能会引发运行时异常,但这是一种糟糕的用户体验。这是我现在正在编码的解决方案,因为我不知道如何做我想做的事情
无论如何,问题是:你知道这是怎么做到的吗
如果所讨论的类型在编译类型中是未知的,则不能进行强类型化。如果您在编译时知道该类型,则可以直接为该类型赋值或强制转换。
您可以使用dynamic
关键字来执行您想要的操作。但是,由于该类型在编译时是未知的,如果使用了不具有该属性的其他类型,则可能会出现运行时错误。