« Parameter modifiers » : différence entre les versions
Apparence
Ligne 26 : | Ligne 26 : | ||
= [https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/method-parameters#ref-readonly-modifier ref readonly] = | = [https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/method-parameters#ref-readonly-modifier ref readonly] = | ||
Pass a parameter by reference and make it readonly. | Pass a parameter by reference and make it readonly.<br> | ||
Useful when you have a big value type and you want to pass only its reference for performances reason, but you don't want it to be overwritten. | |||
<kode lang='cs'> | <kode lang='cs'> | ||
var item = new Item("name"); | var item = new Item("name"); |
Version du 24 mai 2024 à 15:23
ref
Pass a parameter by reference.
// value type
var i = 10;
Method0(i); // 10
Method1(ref i); // 11
void Method0(int i) => i++; // pass the value type parameter by value (copy)
void Method1(ref int i) => i++; // pass the value type parameter by reference
// reference type
var item = new Item("init name");
Method2(item); // init name
Method3(ref item); // new name 3
// pass the reference type parameter by value: the reference is passed by value (copy)
// if the parameter is overwritten (the copy of the reference is overwritten), it doesn't affect the initial object
void Method2(Item item) => item = new("new name 2");
// pass the reference type parameter by reference: the reference is passed by reference
// if the parameter is overwritten (the initial reference is overwritten), it does affect the initial object
void Method3(ref Item item) => item = new("new name 3");
|
ref readonly
Pass a parameter by reference and make it readonly.
Useful when you have a big value type and you want to pass only its reference for performances reason, but you don't want it to be overwritten.
var item = new Item("name");
Method(ref item);
void Method(ref readonly Item item)
{
item = new Item("new name"); // you can't assign a readonly variable
item.Name = "new name"; // you can modify the object properties
}
|
out
Allow to initialize the parameter in the method.
Method5(out var j); // 5
void Method5(out int i) => i = 5;
|