C# 宏定义 define

lzl124631x 2013-11-11 12:42:51
请问C#怎么进行宏定义? 我搜了不少, 都说不能宏定义, 用const.
可是define常量只是宏定义的一个应用, 我现在需求其他应用.
比如程序中常出现的代码片段, 我可以用define封装.
#define GO do{ 几句代码 }while(0)
这在C#里面只能通过写函数才能实现?

再比如, 生成标签方便goto:
#define BEGIN_STATE(state) case state: state:
这样第二个state就是一个goto能够跳转到的标签.这应用在状态机的状态跳转里面.
这在C#里面只能手写?
...全文
21412 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
四大皆空相 2015-12-09
  • 打赏
  • 举报
回复
顺便说一句,define 变量的方式,可以在c#里面这样写

public struct  MyTag
{
   public static int ValOne = 20;
   public static int ValTwo = 20;
}
另外,c++的全局变量,在c#中是不存在,c#中只有静态对象(比如:单件)
四大皆空相 2015-12-09
  • 打赏
  • 举报
回复 4
c,c++ 的理念, c#的理念,是有差异的。 我们在使用 c 的时候,就会抱怨 c++ 的做了太多的额外工作,比如虚拟表,比如多重继承带来的转换灾难,但,我们必需承认,在大型开发方面,c无法与c++比肩,是因为c++的开发效率要高太多了。 我们很容易从多个类里面进行继承,很容易从多态中得道利益,代码的可读性,也不是一个级别的。 同样的,c++ 与 c# 比较,c# 更容易平易近人,我们无需关心内存泄露,无需关心堆栈的申请与释放,c#有元数据,可以映射,这是c++无法实现的。当然,我们可以怀疑c#的运行效率,但我们无法怀疑c#的开发效率。 c、c++ 的优点很多,比如:更自由,更开放。 goto,define 等,就是很好的说明。 c# 的优点也很多,比如:庞大的类库,人性化。 人性化的背后,就是代码是给人看的,不是给机器看的,也就是,团队开发。 当然,c、c++也同样能够做到团队开发,但它们的门槛要高一些。 因此,一般来说,传统的c、c++比较适合底层、高效开发。 c#适合商业化、业务团队开发。 当然,这里的c++是传统c++,不是说托管c++。 既是c#偏向商业开发,而非底层开发,在这个前提下,许多c、c++的特点都会被屏蔽,我们也无可厚非了,毕竟c#需要权衡利弊,哪些需要有,哪些需要无。
ariex1985 2015-12-09
  • 打赏
  • 举报
回复
宏对于DRY是很重要的,但是对于参差不齐的程序员来说,就不一定了。再好的语言特性也要有人会用才行。 另外不认为取消宏支持是进步。语言的灵活性降低了就是降低了。但是语言跟语言不一样,这不算进步也不算退步,单纯的语言特性而已。 需要预编译的话,可以在编译器里自己写个脚本解决,我觉得问题也不大。
jiaoshiyao 2013-11-12
  • 打赏
  • 举报
回复
表示什么是宏 在C++中的东西???
emailtome 2013-11-11
  • 打赏
  • 举报
回复
C# Preprocessor T4 "%CommonProgramFiles%\Microsoft Shared\TextTemplating\1.X\texttransform.exe"
lzl124631x 2013-11-11
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
从语法的角度说,C#肯定不支持宏。但是从设计的角度来说,我是没觉得宏有什么用处,甚至简直是糟粕。
的确有些人反对, 但是我不这么觉得. 宏能够帮助你确保DRY(Don't Repeat Yourself).WebKit的源代码在词法分析的过程中就用了宏来优化代码. 在我看来, 宏的两个缺陷是导致字节码增大和调试不便. 而第二个缺陷我觉得问题不大, 反正宏内语句实现的功能比较简单, 不必知道宏内部怎么运行的问题也不大. 不过至少你解答了C#肯定不支持宏, 非常感谢.
dongdongdongJL 2013-11-11
  • 打赏
  • 举报
回复
其实宏定义这个东西,主要还是取决你你要怎么使用。 C#当中,如果你希望定义一个全局变量或者说全局常量的话,那么建议使用 public static const int MAX_LENGTH; 但是如果你是定义编译选项的话,其实是可以使用#define的,比如可以定义 #define DEBUG实现宏编译
Newcomer2012 2013-11-11
  • 打赏
  • 举报
回复
引用 楼主 lzl124631x 的回复:
请问C#怎么进行宏定义? 我搜了不少, 都说不能宏定义, 用const. 可是define常量只是宏定义的一个应用, 我现在需求其他应用. 比如程序中常出现的代码片段, 我可以用define封装. #define GO do{ 几句代码 }while(0) 这在C#里面只能通过写函数才能实现? 再比如, 生成标签方便goto: #define BEGIN_STATE(state) case state: state: 这样第二个state就是一个goto能够跳转到的标签.这应用在状态机的状态跳转里面. 这在C#里面只能手写?
唉……话说有个系统的核心代码有大量的宏。
threenewbee 2013-11-11
  • 打赏
  • 举报
回复
从语法的角度说,C#肯定不支持宏。但是从设计的角度来说,我是没觉得宏有什么用处,甚至简直是糟粕。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧