Raf*_*afe 7 c# types c-preprocessor
这类似于我找到的其他一些线程,但我还没有找到我需要的答案。我希望得到一个直接的回答,即使是“不,你不能那样做”。
有没有一种方法可以在类/类型存在时使用一个代码块,如果不存在则使用另一个代码块。结果将与使用预处理器指令相同,但无需 #define 和手动注释或取消注释文件中的某些内容。
这可能是一个特殊的用例。我不知道。我在一个环境中工作,在编译任何东西之前,可以安装或不安装文件集。所以有人可以购买一个“安装”的插件(添加到项目中的文件),这使得类/类型可供使用(如扩展 API)。如果有人没有我们的其他插件包之一,我需要提供一种解决方法。我希望这是有道理的。
除非我们必须这样做,否则要求某人打开我们的一个文件(如果他们有另一个插件)取消对预处理器指令的注释对用户来说是不友好的。
例如,我知道这不起作用,因为它只在使用 #define 时测试布尔值,但它说明了我正在尝试做什么......
#if SomeType
SomeType.DoSomething();
#else
DefaultWay.DoSomething();
Run Code Online (Sandbox Code Playgroud)
编辑:我将此添加为 C# 功能建议。请在这里投票:http : //visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2297494-add-type-testing-as-preprocessor-directive
我不知道反射是如何做到这一点的,但我是 C# 的新手,所以如果可能的话,使用重选的例子会很棒。
而不是使用预编译器语句(如果客户端在安装插件后不必重新编译,我不知道它们是否会起作用),我建议查询程序集并尝试实例化按字符串分类,如下所示:
C# - 加载程序集、查找类和调用 Run() 方法的正确方法
Assembly assembly = Assembly.LoadFile(@"C:\dyn.dll");
Type type = assembly.GetType("TestRunner");
if (type != null)
//Do Something
Run Code Online (Sandbox Code Playgroud)
编辑以显示激活器调用
如果 type 不为 null,则使用它来创建所需类型的实例。
var obj = Activator.CreateInstance(type);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1581 次 |
| 最近记录: |