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

本文关键字:强类型 属性 子类 动态 创建 访问 | 更新日期: 2023-09-27 17:57:36

这似乎是一种经常出现的模式,所以我想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关键字来执行您想要的操作。但是,由于该类型在编译时是未知的,如果使用了不具有该属性的其他类型,则可能会出现运行时错误。