başv (C# başvurusu)
Anahtar sözcüğünü ref
aşağıdaki bağlamlarda kullanırsınız:
- Bir yöntem imzasında ve yöntem çağrısında, bir bağımsız değişkeni başvuruya göre bir yönteme geçirmek için.
class TheClass
{
public string? willIChange;
}
struct TheStruct
{
public string willIChange;
}
class TestClassAndStruct
{
static void ClassTaker(TheClass c)
{
c.willIChange = "Changed";
}
static void StructTaker(TheStruct s)
{
s.willIChange = "Changed";
}
public static void Main()
{
TheClass testClass = new TheClass();
TheStruct testStruct = new TheStruct();
testClass.willIChange = "Not Changed";
testStruct.willIChange = "Not Changed";
ClassTaker(testClass);
StructTaker(testStruct);
Console.WriteLine("Class field = {0}", testClass.willIChange);
Console.WriteLine("Struct field = {0}", testStruct.willIChange);
}
}
/* Output:
Class field = Changed
Struct field = Not Changed
*/
- Bir yöntem imzasında, başvuruya göre çağırana bir değer döndürmek için. Daha fazla bilgi için bkz.
ref return
.
int[] xs = new int [] {10, 20, 30, 40 };
ref int found = ref FindFirst(xs, s => s == 30);
found = 0;
Console.WriteLine(string.Join(" ", xs)); // output: 10 20 0 40
ref int FindFirst(int[] numbers, Func<int, bool> predicate)
{
for (int i = 0; i < numbers.Length; i++)
{
if (predicate(numbers[i]))
{
return ref numbers[i];
}
}
throw new InvalidOperationException("No element satisfies the given condition.");
}
- Yerel değişken bildiriminde, başvuru değişkenini bildirmek için.
ref int aliasOfvariable = ref variable;
- Koşullu başvuru ifadesinin veya başvuru atama işlecinin parçası olarak.
void Display(double[] s) => Console.WriteLine(string.Join(" ", s));
double[] arr = { 0.0, 0.0, 0.0 };
Display(arr);
ref double arrayElement = ref arr[0];
arrayElement = 3.0;
Display(arr);
arrayElement = ref arr[arr.Length - 1];
arrayElement = 5.0;
Display(arr);
// Output:
// 0 0 0
// 3 0 0
// 3 0 5
- Bildirimde
struct
, birref struct
bildirmek için. Daha fazla bilgi için yapı türleri makalesineref
bakın.
public ref struct CustomRef
{
public bool IsValid;
public Span<int> Inputs;
public Span<int> Outputs;
}
- Tanımda
ref struct
, birref
alan bildirmek için. Daha fazla bilgi için yapı türleri makalesininref
alanlar bölümüne bakınref
.
public ref struct RefFieldExample
{
private ref int number;
public int GetNumber()
{
if (System.Runtime.CompilerServices.Unsafe.IsNullRef(ref number))
{
throw new InvalidOperationException("The number ref field is not initialized.");
}
return number;
}
}
- Bir tür parametresinin
allows ref struct
türünü belirtmek için genel tür bildiriminde.
class SomeClass<T, S>
where T : allows ref struct
where S : T
{
// etc
}
GitHub'da bizimle işbirliği yapın
Bu içeriğin kaynağı GitHub'da bulunabilir; burada ayrıca sorunları ve çekme isteklerini oluşturup gözden geçirebilirsiniz. Daha fazla bilgi için katkıda bulunan kılavuzumuzu inceleyin.