虽然 C# 规范确实包含预处理器和基本指令(#define、#if 等),但该语言没有像 C/C++ 等语言中那样灵活的预处理器。我相信缺少这种灵活的预处理器是 Anders Hejlsberg 做出的设计决定(尽管很遗憾,我现在找不到相关参考)。从经验来看,这当然是一个不错的决定,因为当我做很多 C/C++ 时,创建了一些非常糟糕的不可维护的宏。
也就是说,在许多情况下,我可以找到一个稍微灵活的预处理器有用。一些简单的预处理器指令可以改进如下代码:
public string MyProperty
{
get { return _myProperty; }
set
{
if (value != _myProperty)
{
_myProperty = value;
NotifyPropertyChanged("MyProperty");
// This line above could be improved by replacing the literal string with
// a pre-processor directive like "#Property", which could be translated
// to the string value "MyProperty" This new notify call would be as follows:
// NotifyPropertyChanged(#Property);
}
}
}
编写一个预处理器来处理这种极其简单的情况是个好主意吗?Steve McConnell 在Code Complete (p208) 中写道:
编写你自己的预处理器 如果一种语言不包含预处理器,那么编写一个相当容易......
我被撕裂了。将如此灵活的预处理器排除在 C# 之外是一个设计决定。但是,我非常尊重的一位作者提到,在某些情况下可能还可以。
我应该构建一个 C# 预处理器吗?有没有可以做我想做的简单事情的?