gpt4 book ai didi

C#预处理器

转载 作者:IT王子 更新时间:2023-10-29 04:38:37 25 4
gpt4 key购买 nike

虽然 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):

Write your own preprocessor If a language doesn't include a preprocessor, it's fairly easy to write one...

我很伤心。将这种灵活的预处理器排除在 C# 之外是一个设计决定。但是,我非常尊敬的一位作者提到在某些情况下它可能没问题。

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

最佳答案

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

关于C#预处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37248/

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