Csharp/CSharp Tutorial/struct/struct parameter

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

struct objects have the same pass by value semantics as simple intrinsics

using System;
class Class1 {
    public static void Main(string[] args) {
        int i = 0;
        Console.WriteLine("Initial value of i = {0}", i);
        fn_int(i);
        Console.WriteLine("i after fn_int() = {0}", i);
        fn_Int32(i);
        Console.WriteLine("i after fn_Int32 = {0}", i);
        Console.WriteLine();
        Int32 i32 = 1;
        Console.WriteLine("Initial value of i32 = {0}", i32);
        fn_int(i32);
        Console.WriteLine("i32 after fn_int() = {0}", i32);
        fn_Int32(i32);
        Console.WriteLine("i32 after fn_Int32 = {0}", i32);
    }
    public static void fn_Int32(Int32 k) {
        k = 10;
    }

    public static void fn_int(int k) {
        k = 20;
    }
}

Use ref for a struct parameter

using System;
public struct MyStruct
{
    public int val;
}
public class MainClass
{
    static void Main() {
        MyStruct myValue = new MyStruct();
        myValue.val = 10;
        PassByValue( myValue );
        Console.WriteLine( "Result of PassByValue: myValue.val = {0}", myValue.val );
        PassByRef( ref myValue );
        Console.WriteLine( "Result of PassByRef: myValue.val = {0}", myValue.val );
    }
    static void PassByValue( MyStruct myValue ) {
        myValue.val = 50;
    }
    static void PassByRef( ref MyStruct myValue ) {
        myValue.val = 42;
    }
}
Result of PassByValue: myValue.val = 10
Result of PassByRef: myValue.val = 42