Csharp/CSharp Tutorial/struct/struct parameter

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

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

<source lang="csharp">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;
   }

}</source>

Use ref for a struct parameter

<source lang="csharp">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;
   }

}</source>

Result of PassByValue: myValue.val = 10
Result of PassByRef: myValue.val = 42