// First case: Explicitly invoking an overloaded method that takes an [c]in[/c] parameter:
static void PrintFirstElement(Matrix4x4 m) => Console.WriteLine(m.M11);
static void PrintFirstElement(in Matrix4x4 m) => Console.WriteLine(m.M11);
static void Test() {
var m = GetMatrix();
PrintFirstElement(m); // Invokes first method, passes 'm' by value (i.e. copied)
PrintFirstElement(in m); // Invokes second method, passes 'm' by readonly reference
}
Code snippet taken from "Complete C# Quick Reference - C# 7".