科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件正确理解C sharp中的ref关键字(2)

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

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

作者:builder.com.cn 2007年8月31日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

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

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章