您所在的位置:开发 > .NET > 正确理解C#中的ref关键字(2)

正确理解C#中的ref关键字(2)

2007-08-29 16:46 Kellin 天极网 我要评论(0) 字号:T | T
一键收藏,随时查看,分享好友!

本文举例说明C#的ref关键字的正确用法,供大家参考!

AD:

大家能马上给出正确的答案么?如果能,那看来你对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#中的区别有进一步的认识。

【相关文章】

【责任编辑:火凤凰 TEL:(010)68476606-8036 】

内容导航

分享到:

网友评论TOP5

查看所有评论(

提交评论

  1. 专题:JVM编程语言,你的选择?
  2. 宅男程序员给老婆课程之11:域模型

文章排行

本月本周24小时

热点专题

更多>>

读书

信息安全风险评估
信息安全风险评估理论研究日趋成熟,相关资料比较充分,但有关评估实际工作的参考资料很少。本书以信息安全风险评估实践为基础,

51CTO旗下网站

领先的IT技术网站 51CTO 领先的中文存储媒体 WatchStor 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 移动互联网生活门户 灵客风LinkPhone