当前位置:  开发笔记 > 编程语言 > 正文

C#预处理器

如何解决《C#预处理器》经验,为你挑选了2个好方法。

虽然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#预处理器吗?有没有可以做我想做的简单事情?



1> Matt Hamilto..:

考虑一下面向方面的解决方案,比如PostSharp,它根据自定义属性在事实之后注入代码.它与预编译器相反,但可以为您提供所需的功能(PropertyChanged通知等).



2> John Milliki..:

我应该构建一个C#预处理器吗?有没有可以做我想做的简单事情?

你总是可以使用C预处理器 - C#足够接近,语法方面.M4也是一种选择.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有