C#、VB.NET、C++.NET中的按引用传递参数的方式比较
2006-06-17 11:08
435 查看
最近正在用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);
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#方法中调用参数的值传递方式和引用传递方式,以及ref与out的区别
- c#方法中调用参数的值传递方式和引用传递方式以及ref与out的区别深入解析
- 读<<CLR via C#>>总结(7) 以传引用的方式向方法传递参数---ref&out
- C#.NET学习笔记---C#中方法参数的传递方式: 值类型(默认),ref类型,out类型和params类型
- C#(也适用其他)的初学者对string是值类型还是引用类型搞不清楚,还有对参数传递也比较迷糊
- c#方法中调用参数的值传递方式和引用传递方式,以及ref与out的区别
- c#方法中调用参数的值传递方式和引用传递方式,以及ref与out的区别
- c#方法中调用参数的值传递方式和引用传递方式,以及ref与out的区别
- C# 数据类型的引用类型、值类型内存存储方式以及区别; 函数参数传递的引用传递(址传递)、值传递区别
- C#调用c++的dll,结构体数组作为引用参数的传递方式
- C# 同一应用程序域不同线程之间的参数传递方式
- C++.NET与C#的编码区别 ,vb.net与c#的语法比较
- VB.NET and C# 语法比较手册
- VB.NET and C# 语法比较手册
- 有关.NET参数传递的方式引发的思考
- c#使用线程传递参数的主要几种方式
- C#给线程传递参数有3种方式
- 黑马程序员 C#参数传递方式及使用情境
- c#中通过值和引用传递参数
- asp.net中网页间传递参数用什么方法比较