gpt4 book ai didi

c# - 如何在 C# 中安排代码在编译时运行

转载 作者:行者123 更新时间:2023-11-30 14:52:02 25 4
gpt4 key购买 nike

是否有可能在编译期间执行一些代码?

例如,我想检查泛型类的参数类型中是否存在动态对象的请求方法。

 // This code has no actual purpose, just as an example
public class Sample<T>
{
public Sample<T>(T instance)
{
foo = Value = instance;
/* adding some extra code(e.g. logging) to the methods of T, by
inserting a "M" in front of the method names of T */
}

public T Value { get; }
public dynamic foo { get; }
}

如何/可以使用

var foo = new Sample<string>("hey");
foo.MSubstring(0,0);

现在我想知道是否有可能在编译时执行代码,例如,在运行前抛出 foo.MgetSize() 在 T 中不存在的异常。

(这道题只是关于如何在编译时执行代码,这个例子不是真正的问题。)

我没有计划如何做到这一点。也许使用那些 #if- 东西?

最佳答案

是的,可以在构建时执行代码。毕竟,构建程序的工具本身就是代码。

您要问的是如何自定义该构建过程并在此过程中执行一些额外的逻辑。如何执行此操作取决于您使用的实际工具 - 例如,对于 Visual Studio 和 MSBuild 系统,您可以引用 MSDN documentation on custom build steps and build events .

您的自定义构建工具是什么样子取决于它将在流程的哪个部分启动。如果它使用源代码,它需要能够解析 C# 源代码(可能还有 Visual Studio 项目文件) ).如果它通过验证发出的程序集(在典型构建过程结束时生成的二进制文件)来工作,它可以简单地使用反射来检测您想要的错误。我会说后者更方便。

关于c# - 如何在 C# 中安排代码在编译时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32641138/

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