gpt4 book ai didi

C#封装: Get types from other project

转载 作者:行者123 更新时间:2023-11-30 17:57:22 25 4
gpt4 key购买 nike

我需要解释一下才能解决问题。

我有 3 个项目:

项目 1 可以看到项目 2 和 3。

项目2可以看到项目3。

项目 3 是 dll,其他是应用程序。

我不得不设计一个包含很多子类的类。子类都有一个在基类中声明为抽象的方法,因此它们都必须使用它。它们需要分布在所有项目中,因为 methode 中的代码直接与项目交互。

抽象基类在项目 3 中,子类在项目 2 和 1 中。这是我遇到的问题:

这是我写的方法:

   public static IEnumerable<Type> GetSubClasses(Type typ)
{
IEnumerable<Type> subclasses =
from type in Assembly.GetAssembly(typ).GetTypes()
where type.IsSubclassOf(typ) && !type.IsAbstract
select type;
return subclasses;
}

我试图获取该类型的所有子类,但当我这样做时,我只获取了当前项目的子类。例如,如果我尝试从项目 1 中获取它们,我不会从项目 2 中获取子类。

我该怎么做?我知道我可以从项目 2 中获取程序集引用,但它没有 GetAssembly(Type t) 方法,借助它我获取了所有子类。如果它是一样的,我只需要在那里做同样的事情。

我的第二个问题是,是否有更简单的方法?在许多项目中都有这些类有点……“大”,也许有一种解决方案可以将它们合二为一。就像我说的,他们都需要的方法代码需要直接与他们所在的项目交互。

最佳答案

问题是您正在调用 Assembly.GetTypes()。这只为您提供了该特定程序集中的类。如果所有三个程序集都有 Assembly 对象,您可以执行类似的操作

assem1.GetTypes()
.Concat(assem2.GetTypes())
.Concat(assem3.GetTypes())

所以问题是如何获得三个Assembly 对象。从项目 1 你可以说

var assem1 = typeof(SomeClassInProj1).Assembly;
var assem2 = typeof(SomeClassInProj2).Assembly;
var assem3 = typeof(SomeClassInProj3).Assembly;

在您无法“看到”其他程序集的项目中,您需要加载它们。请参阅 Assembly.Load 的文档.

关于C#封装: Get types from other project,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13285547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com