【发布时间】:2025-12-24 21:00:16
【问题描述】:
简单地说,我正在做的是有效地为其他一些框架实现者制作一个具有一些有价值的框架特性的“形状包”。我将 Shape 包打包到一个类库中,然后继续编写测试实现。我动态加载 Shape 包 .dll 并将类型反映到程序集中。我可以创建对象、数据绑定到 DataGridViews 以及我喜欢的任何其他东西 - 但我无法通过像
这样的简单检查if (squareObject is Shape)
or
if (Square.IsSubclassOf(Shape))
举个例子—— 如果我有一个包含一个类的类库:
namespace Shapes
{
public class Shape
{
public string UsefulShapeProperty { get; set; }
}
}
然后我创建一个具有一个类的实现库(引用 Shapes 库):
namespace MyShapes
{
public class UselessShape : Shapes.Shape
{
public string Description { get; set; }
}
}
最后,我创建了第三个项目,它引用 Shapes 库并动态加载实现库,例如 MyShapes:
using Shapes;
public class ShapeChecker
{
... (Constructor, some means to load and reflect the types from UselessShapes.dll, omitted for brevity and clarity)
public void Report(Type typeToCheck)
{
if (typeToCheck.IsSubclassOf(typeof(Shapes.Shape)))
Console.WriteLine("Rejoice, for " + typeToCheck.ToString() + " is a Shape!");
}
}
我从来没有听过“欢欣鼓舞”。我还使用了 Activator.CreateInstance 并检查了返回的对象。 Activator 给了我一个 UselessShape 对象,但类型检查失败。
如何在动态加载的程序集中检查某些已知类型(如 Shape)的实现,这样我就不需要 ShapeChecker 了解有关 MyShapes 包的任何特殊信息?
【问题讨论】:
-
ShapeChecker中的Shape是什么?typeToCheck是什么? (一个简短但完整的示例在这里会很有帮助。) -
你是绝对正确的。我在原始示例中输入错误 System.Type 的 IsInstanceOfType 方法。我已经更新了更多的正确性和清晰度。谢谢! msdn.microsoft.com/en-us/library/…
标签: c# .net reflection