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