王朝网络
分享
 
 
 

C#、VB.NET、C++.NET中的按引用传递参数的方式比较

王朝c#·作者佚名  2006-06-24
宽屏版  字体: |||超大  

最近正在用C#编写一个管理程序,由于用到了MFC编写的一个控件,我必须通过C ++.NET封装了该类,将其写入一个UserControl,然后通过C#调用这个UserControl。其中涉及到几个函数,比较典型的一个在MFC中(标准C++中的引用表示方式)的函数表示如下:

bool GetCurItem(int &startHour, int &startMin,int &endHour,int &nEndMin, CString &strText, COLORREF &crBackground)

作用是返回控件中当前项目(Item)的一些信息,在MFC中通过在函数声明中使用“&”限制参数表示引用,可以通过参数返回有关的值,通过C++.NET(CLR)封装必须是如下的方式:

bool GetCurItem( int %nBegHour,int %nBegMin,int %nEndHour,int %nEndMin, String ^%strText, COLORREF %crBackground)

C++在托管的代码中使用“%”表示按引用传递参数。当然,如果上面的这个函数中将除了strText参数之外的其他参数前的“%”符号修改为“&”编译也可以通过,但是C#却不能够正常调用了。

在C#中对应的函数的表示方式是:

bool GetCurItem( ref int nBegHour,ref int nBegMin,ref int nEndHour,ref int nEndMin, ref String strText, ref uint crBackground)

在C#中,通过在函数参数之前(确切的说,应该是在数据类型之前)添加ref关键字表示一个引用。

在VB.NET中,同样函数的表示如下

Private Function GetCurItem(ByRef nBegHour As Integer, ByRef nBegMin As Integer, ByRef nEndHour As Integer, ByRef nEndMin As Integer, ByRef strText As String, ByRef crBackground As Long) As Boolean

在VB.NET中,直接在函数参数的前面添加byref关键字,表示按引用传递。

说明

1)由于C ++可以同时支持本地代码和托管代码,因此,引用的表示方式也有两种,一种是本地代码的表示方式,一种是托管代码的表示方式,VB和C#各有一种。

2)C++中托管和非托管混合编程时,特别注意不要将&和%混淆,这两个符号在编译时都没有问题,如果希望函数被其他托管代码调用,使用%,如果被C++非托管代码调用,则使用&。

3)在具有按引用传递参数的函数中,函数的调用方式各种语言也不尽相同,例如,C++和VB中,都是将变量直接作为参数传递给GetCurItem函数即可,但是在C#中,每个参数的前面必须写上ref,例如C#调用GetCurItem函数的方式如下:

GetCurItem(ref nBegHour, ref nBegMin, ref nEndHour, ref nEndMin, ref sText, ref nColor);

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有