【发布时间】:2019-06-18 09:44:25
【问题描述】:
简短地说,我的程序是比较算法。目前,每当我添加或删除某些算法时,我都必须更改代码。我正在使用 C#。
我的想法是只检查目录中的类,然后为该目录中的每个对象在列表中实例化它(或字典,但我还不太了解这些,但现在让我们说列表)。这样我就不必手动添加每个算法,并且可以通过在所述文件夹中添加或删除类来添加或删除类。
所以每当我编译我的程序时,它都会通过 src/model/algorithms,获取每个属于 c# 类的文件,然后将该类的一个实例添加到列表中。
这可能吗?我该怎么做?
【问题讨论】:
-
目录如何包含“类”?您想按需编译 C# 文件吗?或者您想要一个类似插件的系统,可以按需加载包含类的程序集?这两个问题都曾被问过和回答过,请尝试搜索。
-
每当我编译我的程序时,我想检查 src/model/algorithms 中是否包含类文件,然后实例化这些文件。我试图研究这个,但没有找到任何东西
-
你真的需要更好地描述你的场景。你想用你的可执行文件交付你的源文件吗?我猜不是。这听起来确实像一个 XY 问题。这与源文件无关。我认为你想要的是找到所有存在于你的可执行文件中的“算法”类型。为此,要么将某个命名空间列入白名单,要么让所有算法实现某个接口。然后在应用程序启动时,扫描该命名空间或接口的所有类型,并实例化它们。
-
@CodeCaster 我很惊讶。我进入这个想法我知道一点点,在对你所说的一无所知之后,我确信我实际上一无所知。向我的所有功能解释它我想按 f5,而不是我手动实例化每个算法,我希望控制器实例化我的 /algorithms/文件夹中的所有内容
-
关键是您的可执行文件与您的源文件无关。它们被编译到您的可执行文件中,您不希望将源文件与您的可执行文件一起交付。根本没有必要。请参阅下面的答案,并检查这是否符合您的要求。
标签: c# oop instantiation