HTML5技术

C#与C++的发展历程第三 - C#5.0异步编程巅峰 - hystar(19)

字号+ 作者:H5之家 来源:博客园 2016-01-15 10:03 我要评论( )

使用其简单只需要声明一个参数,然后把这些Attribute加在参数前面,在函数中取到的参数值就是我们想要的结果。一个简单的例子如下: staticvoidCaller(){Called();}staticvoidCalled([CallerMemberName]stringmembe

使用其简单只需要声明一个参数,然后把这些Attribute加在参数前面,在函数中取到的参数值就是我们想要的结果。一个简单的例子如下:

static void Caller() {     Called(); } static void Called(     [CallerMemberName] string memberName = "",     [CallerFilePath] string sourceFilePath = "",     [CallerLineNumber] int sourceLineNumber = 0) {     Console.WriteLine(memberName);     Console.WriteLine(sourceFilePath);     Console.WriteLine(sourceLineNumber); }

输出如下:

Main

C:\Users\...\ConsoleApplication1\Program.cs

31

还算是简单方便,尤其对于输出日志来说。

 

C#5.0还对Lambda捕获闭包外变量进行了一些小优化,这个在之前文章介绍Lambda时有介绍,这里不再赘述。

 

C++ 调用方法信息

在C中就有宏来完成类似的功能。由于C++可以兼容C,所以在C++11之前,一般都用这种C兼容的方式来获得被调用方法的信息。新版的C++对此进行了标准化,增加了一个名为__func__的宏来完成这个功能。

需要注意的是和C#中类似功能获得调用方法名称不同,这个__func__宏得到的是被调用方法,即__func__所在方法的名称。个人感觉C++中__func__更实用。仍然是一个简单的例子:

void Called() {     std::cout << __func__ << std::endl; } void Caller() {     Called(); }

调用Caller()将输出"Called"。

C++中实现这个宏的方式就是在编译过程中在每个方法体的最前面插入如下代码:

static const char* __func__ = "Called";

了解这个之后你会感觉这个宏没有那么神秘了。

除了新被标准化的__func__在大部分C++编译器中仍然可以使用__LINE__和__FILE__获取当前行号和所在文件。

 

预告

下篇文章将介绍C#6带来的新特性,C#6中没有什么重量级的改进(据说编译器好像有很大改动,那个不了解就不说了,不是一般用户能仔细研究的。编译前端和编译后端发展这么多年复杂程度接近操作系统了),大都是一些语法糖,而且糖的数量还不少。欢迎继续关注。

 

本文断断续续写了很久,中间还出去玩了2周。有什么错误请指正。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 2年前端学习历程,与找不到工作的悲愤与吐槽!(100%真实经历,看博主怎么一步步走向失业) - 蒋启钲

    2年前端学习历程,与找不到工作的悲愤与吐槽!(100%真实经历,看博

    2017-03-29 11:00

  • 开源第三方登录组件OAuthLogin2.0 支持QQ,阿里巴巴,淘宝,京东,蘑菇街,有赞等平台 - 大壮他哥

    开源第三方登录组件OAuthLogin2.0 支持QQ,阿里巴巴,淘宝,京东,蘑菇街

    2017-01-20 15:00

  • 从零到百亿互联网金融架构发展史 - 纯洁的微笑

    从零到百亿互联网金融架构发展史 - 纯洁的微笑

    2017-01-14 13:00

  • 记一次企业级爬虫系统升级改造(四):爬取微信公众号文章(通过搜狗与新榜等第三方平台) - 彩色铅笔

    记一次企业级爬虫系统升级改造(四):爬取微信公众号文章(通过搜狗

    2017-01-12 10:01

网友点评
/