jiangsheng

http://www.csdn.net/develop/author/netauthor/jiangsheng/
随笔 - 142, 评论 - 629, 引用 - 27

导航

关于

 
这下要维护3个BLOG了,faint 其他的地址:

所有的文章版权归原文作者所有,任何人需要转载文章,必须征得原文作者授权。
我的MVP配置

标签

每月存档

最新留言

广告

 

目前版本的VC2005测试版中,default关键字不仅用于指定类级别的索引器,而且也用于访问默认属性。但是奇怪的是,默认属性的原名不能访问了,也就是说,如果要把下面的代码段从托管C++移植到VC2005附带的C++/CLI,不仅需要更改指针的类型,而且要把属性的名称更改为default:

//[System::Reflection::DefaultMemberAttribute("Fields")] interface _Recordset

//托管C++语法
//extern _Recordset* results;
Fields* ResultFields=results->Fields;

//C++/CLI语法
//extern _Recordset^ results;
Fields^ ResultFields=results->default;

如果继续使用原来名字来访问属性的话,会报告编译错误:

Fields^ ResultFields=results->Fields;//C3293: 'Fields': use 'default' to access the default property (indexer)

这是一个Breaking Change。在语言规范中,默认索引属性只使用一个名字“default”,而且只有这一个实现。更进一步,默认索引属性只能用如下方式访问:

  • obj[index]
  • obj->default[index]
  • obj->default::get(index)
  • obj->default::set(index, value)

顺便说一下,在C++/CLI中也可以使用类似C#里面的for each语句了( http://msdn2.microsoft.com/library/ms177202(en-us,vs.80).aspx),而且对于非托管的STL容器也有效,不过看起来真不习惯。

参考

打印 | 张贴于 2005-08-30 14:57:00 | Tag:.Net Framework  C++/CLI/Managed C++ Extension  编译(CodeGen)

留言反馈

暂时没有留言纪录
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.2.0