c#

位置:IT落伍者 >> c# >> 浏览文章

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


发布日期:2019年06月12日
 
正确理解C#中的ref关键字(续)[2]

那么我们再来看看上次那些 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 = ;

//

mValue = ;

}

public static void TestNoRef(MyClass m)

{

// 这里是一个普通的传递引用类型的例子相当于

// MyClass m = m;

// mValue = ;

//

// m 复制了 m 中的内容也就是说现在 m 也和 m 一样指向了 m 指向的实例

// 所以这里对 m 的修改也会影响到 Main 中的 m

//

mValue = ;

}

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 现在则指向了这个新生成的实例

// 所以这里 mValue = 是会影响到 Main 中的结果的

//

m = new MyClass();

mValue = ;

}

public static void TestCreateNoRef(MyClass m)

{

// 在这个方法里面我们新申明了一个 MyClass 的实例而让 m 指向了这个实例

// 这时候实际上将 m 的值修改了 m 和 Main 中的 m 各自指向不同的实例

// 所以对 m 做的任何修改都不会影响到 m 了

//

m = new MyClass();

mValue = ;

}

public static void Main()

{

MyClass m = new MyClass();

mValue = ;

TestRef(ref m);

ConsoleWriteLine(mValue);

TestNoRef(m);

ConsoleWriteLine(mValue);

TestCreateRef(ref m);

ConsoleWriteLine(mValue);

TestCreateNoRef(m);

ConsoleWriteLine(mValue);

}

[] []

               

上一篇:ADO.NET Entity Framework 入门示例向导

下一篇:正确理解C#中的ref关键字(续)[1]