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

原创 2006年06月17日 11:08:00

      最近正在用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);

 

c# c++ vb等数据类型对照表

有关命名空间和类型名的更多信息,请参见常规类型系统。 System 命名空间 System 命名空间是 .NET Framework 中基本类型的根命名...

新一代.NET Office开发指南:Excel篇

新一代.NET Office开发指南:Excel篇  第1章 Excel使用基础 11.1 工作薄和工作表 21.2 Excel用户界面 21.3 格式和外观 51.4 公式和函数 61.5 图形和图...

VB.NET可选参数调用方式解析

VB.NET作为一款真正的面向对象语言,其功能非常强大,可以支持继承,并能进行代码托管等等。在这里我们先来了解一下VB.NET可选参数的一些应用技巧,希望能帮助大家了解这一编程语言的基本应用方法。.n...

VB.NET与C#之间的比较

在网上经常能看到一些评论和比较C#、VB.net优劣的文章。其中绝大多数都认为:VB.net没有它存在的必要,VB.net迟早要被C#取代。确实,计算机语言不是很重要的,也许讨论它有点无聊。所以还希望...

VB.NET和C#之比较

一、语言的人性化区别    例1. 声明变量时: C#:  int    iTest   ; //很直接 VB.net:Dim    iTest    As    Integer ‘很委婉 虽然声明相...

vb.net和c#的语法比较

学习三层有相当一段时间了,一直都在用c#练习。现在要开始vb.net版机房

VB.NET多线程编程参数的传递以及返回值的获取

下面的例子是使用多线程同时弹出4个msgbox ———————————————— 1 2 3 4 5 6 7 8 9 10 11 12 13...

c# 在WinForm 窗体间传递信息(转换为VB.net)

转载自《c# 在WinForm 窗体间传递信息》http://blog.sina.com.cn/s/blog_45eaa01a01014552.html,我转换为VB.net,并在方法6中讲述如何从主...

16进制字符串转数字(C/C++,VB/VB.net,C#) 添加备注

原文地址:http://blog.csdn.net/hejishan/article/details/2169265 红色部分是我的备注: 16进制字符串转数字(C/C++,VB/VB.net,C...

关于.NET参数传递方式的思考

年关将近,整个人已经没有了工作和写作的激情,估计这个时候很多人跟我差不多,该相亲的相亲,该聚会喝酒的聚会喝酒,总之就是没有了干活的心思(我有很多想法,但就是叫不动我的手脚,所以我只能看着别人在做我想做...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#、VB.NET、C++.NET中的按引用传递参数的方式比较
举报原因:
原因补充:

(最多只允许输入30个字)