首页 | 互联网 | IT动态 | Cisco | Windows | Linux | Java | .Net | Oracle | 华为 | 存储世界 | 服务器 | 网络设备 | IDC | 安全 | 求职招聘
IT培训 | 数字网校 | 技术专题 | 电子书下载 | 教学视频 | 网页设计 | 平面设计 | 解决方案 | 直播室 | 虚拟考场 | 搜索 | 博客 | 沙龙 | 论坛
首页 | JAVA | C# | VB | VB.NET | C/C++ | delphi | 工程管理 | 其他语言 | 论坛
各大城市软件开发培训、软件人才免费咨询热线:400-700-5807
 您现在的位置: 中国IT实验室 >> 桌面开发 >> C# >> 文章正文
正确理解C#中的ref关键字
来源:ChinaItLab 作者:Kellin 时间:2007-8-30


  大家能马上给出正确的答案么?如果能,那看来你对 ref 的用法了解得还是非常不错的。其实如果大家对 C++ 比较熟悉的话,把这段代码换成 C++ 的就好理解的多了。

// ----------------------------------------
// MyClass definition
#pragma once
 
class MyClass
{
public:
  int Value;
};
 
typedef MyClass* MyClassPtr;
 
 
// ----------------------------------------
// Tester methods
void TestRef(char* i)
{
  *i = 'b';
}
 
void TestNoRef(char i)
{
  i = 'c';
}
 
void TestRef(MyClassPtr* m)
{
  (*m)->Value = 10;
}
 
void TestNoRef(MyClassPtr m)
{
  m->Value = 20;
}
 
void TestCreateRef(MyClassPtr* m)
{
  delete (*m);
  *m = new MyClass();
  (*m)->Value = 100;
}
 
void TestCreateNoRef(MyClassPtr m)
{
  m = new MyClass();
  m->Value = 200;
}
 
int main(int argc, char* argv[])
{
  char c = 'a';
 
  TestRef(&c);
  printf("%c\n", c);  // output: b
  TestNoRef(c);
  printf("%c\n", c);  // output: b
 
  MyClassPtr m = new MyClass;
  m->Value = 1;
 
  TestRef(&m);
  printf("%d\n", m->Value);
  
  TestNoRef(m);
  printf("%d\n", m->Value);
  
  TestCreateRef(&m);
  printf("%d\n", m->Value);
  
  TestCreateNoRef(m);
  printf("%d\n", m->Value);
 
  delete m;
 
  return 0;
}

  这两段分别用 C# 和 C++ 实现的代码的输出结果都是一样的。后面用 MyClass 测试的输出结果是:

10
20
100
100

  具体的原因相信经过大家的分析应该会很清楚的。另外如果大家有兴趣可以用 structs 再试试,也可以同时对 structs 在 C++ 和 C# 中的区别有进一步的认识。

上一页  [1] [2] 

【责编:Youping】
中国IT教育热线咨询
相关文章
几种VC++数据库开发技术的相对比较
利用C#实现标注式消息提示窗口
用C#创建COM对象
Visual C#多线程参数传递浅析
用C#创建COM对象
利用C#实现标注式消息提示窗口
C#和Visual Basic中的闭包与对象生存时期
C#的前途如何?
C#写的ADSL拨号程序示例
VB/VB.NET/C#导出到Excel的方法
推荐文章

 精彩友情推荐
·锐捷交换机报价
·锐捷交换机
·锐捷网络网络交换机
·smc交换机
·smc交换机报价
·IDC资讯大全
·机房品质万里行
·IDC托管必备知识
·全国IDC报价
·网站推广优化
最新更新 推荐文章
·框架:J2EE WEB应用架构分析03-13
·几种VC++数据库开发技术的相对比…03-13
·利用C#实现标注式消息提示窗口03-13
·用C#创建COM对象03-13
·Visual C#多线程参数传递浅析03-13
·Visual C#多线程参数传递浅析03-13
·基于HOOK和MMF的Win密码渗透技术11-15
·Visual C++设计超强仿QQ自动伸缩…11-15
·Java SE 6.0实现高质量桌面集成开…11-15
·史玉柱东山再起幕后高人11-15
·Visual Basic 9.0隐式类型的局部…09-30
·用C#创建COM对象09-06
·IT管理十大失误及其对策08-30
·VC中利用MFC设计绘图程序初步08-23
·JAVA中对象创建和初始化过程08-23
·C语言中的位域的使用08-09
·浅谈Java桌面应用程序开发08-09
·C#的前途如何?08-02
·几种VC++数据库开发技术的相对比较07-12
·用Visual C#实现网络封包监视07-12
·VB.NET中的TextBox控件详解07-12
·VB.NET实现PC与掌上电脑PPC的双向通信07-05