知识大全 正确理解C#中的ref关键字(续)[2]
Posted 指针
篇首语:夫唯不争,故天下莫能与之争。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 正确理解C#中的ref关键字(续)[2]相关的知识,希望对你有一定的参考价值。
正确理解C#中的ref关键字(续)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
那么我们再来看看上次那些 C# 的代码
//
// MyClass definition
public class MyClass
public int Value;
//
// Tester methods
public static void TestRef(ref MyClass m )
// 这里的 m 也就相当于大家所说的指向指针的指针
// m 指向 Main 中的 m 而 m 则指向那个实际的 MyClass 的实例
// 相当于 C++ 中的
// MyClass** m = &m;
// (*m ) >Value = ;
//
m Value = ;
public static void TestNoRef(MyClass m )
// 这里是一个普通的传递引用类型的例子 相当于
// MyClass m = m;
// m Value = ;
//
// m 复制了 m 中的内容 也就是说现在 m 也和 m 一样 指向了 m 指向的实例
// 所以这里对 m 的修改也会影响到 Main 中的 m
//
m Value = ;
public static void TestCreateRef(ref MyClass m )
// 这里的 m 也是一个指向引用的引用
// m 指向 Main 中的 m 而 m 则指向那个实际的 MyClass 的实例
// 相当于 C++ 中的
// MyClass** m = &m;
// *m = new MyClass();
// (*m ) >Value = ;
// 在上面的 *m = new MyClass() 这个调用的时候 实际上只是将 Main 中 m 的值(引用)给修改了
// 也就是说现在 m 指向 Main 中的 m 而 m 现在则指向了这个新生成的实例
// 所以这里 m Value = 是会影响到 Main 中的结果的
//
m = new MyClass();
m Value = ;
public static void TestCreateNoRef(MyClass m )
// 在这个方法里面 我们新申明了一个 MyClass 的实例 而让 m 指向了这个实例
// 这时候 实际上将 m 的值修改了 m 和 Main 中的 m 各自指向不同的实例
// 所以对 m 做的任何修改都不会影响到 m 了
//
m = new MyClass();
m Value = ;
public static void
MyClass m = new MyClass();
m Value = ;
TestRef(ref m);
Console WriteLine(m Value);
TestNoRef(m);
Console WriteLine(m Value);
TestCreateRef(ref m);
Console WriteLine(m Value);
TestCreateNoRef(m);
Console WriteLine(m Value);
[ ] [ ]
cha138/Article/program/net/201311/15017相关参考