不,编译器不允许您直接添加关键字。
这并不意味着你不能完成你想要的,但这将是不平凡的。您将需要执行自己的自定义静态代码分析。
罗斯林
一种方法是通过新的 .NET 编译器服务 (Roslyn) 代码分析器。您可以阅读这篇 MSDN 文章开始:https://msdn.microsoft.com/en-us/magazine/dn879356.aspx,您最终会得到如下所示的内容:
这将在 Visual Studio 中工作,您至少可以生成警告,我也会假设错误(或者您必须打开“将警告视为错误”)。
因为您想以声明方式将检查添加到某些变量,您需要使用Attributes:
/// <summary> Indicate a variable must be given a value
/// in the same line it's declared </summary>
public class ImportantAttribute : Attribute {}
public class Program
{
[Important]
object thisShouldError;
object thisIsFine;
}
然后,当您编写分析器时,您需要检查变量声明节点,看它是否被 Important 修饰。
如果您希望它在构建服务器(或 VS 之外)上工作,您可能需要做更多工作:Roslyn: workspace loads in console application but not in msbuild task
风格警察
最简单的方法可能是使用代码分析(即 StyleCop)针对您的代码库运行静态分析规则集:
你需要编写你自己的规则集,我不知道规则集是否会给你保真度,以便能够声明你想要强制检查的变量声明,即我不知道是否你可以混合搭配这个:
public class Program
{
[Important]
object thisShouldError;
object thisIsFine;
}
福迪
另一种方法是使用像Fody 这样的IL 编织工具,它可以让您在编译期间操作应用程序的IL。 AFAIK 您不能直接生成编译错误,但您可以添加无效的 IL,这反过来会生成编译时错误。
因此,基于与上述相同的代码,在使用 Fody 编译通过后,您最终会得到如下代码:
public class Program
{
[Important]
object thisShouldError YouForgotToInitializeThisImportantVariable;
object thisIsFine;
}
自定义编译器
微软确实开源了 C# 编译器:https://github.com/dotnet/roslyn。因此,如果您真的有野心,您绝对可以在自己的编译器分支中添加自己的关键字。当然,您基本上将拥有自己的语言,并且除了您的自定义编译器之外,它将无法编译任何其他语言。