Anda dapat menggunakan outkata kunci kontekstual dalam dua konteks (masing-masing adalah tautan ke informasi terperinci), sebagai pengubah parameter atau dalam deklarasi parameter tipe umum pada antarmuka dan delegasi. Topik ini membahas pengubah parameter, tetapi Anda dapat melihat topik lainnya ini untuk informasi tentang deklarasi parameter tipe umum.
Kata outkunci menyebabkan argumen dilewatkan oleh referensi. Ini seperti refkata kunci, kecuali yang refmengharuskan variabel diinisialisasi sebelum dilewatkan. Untuk menggunakan outparameter, definisi metode dan metode panggilan harus secara eksplisit menggunakan outkata kunci. Sebagai contoh: C #
class OutExample
{
static void Method(out int i)
{
i = 44;
}
static void Main()
{
int value;
Method(out value);
// value is now 44
}
}
Meskipun variabel yang dikirimkan sebagai outargumen tidak harus diinisialisasi sebelum dikirimkan, metode yang dipanggil diperlukan untuk menetapkan nilai sebelum metode kembali.
Meskipun refdan outkata kunci menyebabkan perilaku run-time yang berbeda, mereka tidak dianggap sebagai bagian dari tanda tangan metode pada waktu kompilasi. Oleh karena itu, metode tidak dapat kelebihan beban jika satu-satunya perbedaan adalah bahwa satu metode mengambil refargumen dan yang lain mengambil outargumen. Kode berikut, misalnya, tidak akan dikompilasi: C #
class CS0663_Example
{
// Compiler error CS0663: "Cannot define overloaded
// methods that differ only on ref and out".
public void SampleMethod(out int i) { }
public void SampleMethod(ref int i) { }
}
Akan tetapi, overloading dapat dilakukan jika salah satu metode menggunakan argumen refatau outargumen dan yang lainnya tidak menggunakan, seperti ini: C #
class OutOverloadExample
{
public void SampleMethod(int i) { }
public void SampleMethod(out int i) { i = 5; }
}
Properti bukan variabel dan karena itu tidak dapat dilewatkan sebagai outparameter.
Untuk informasi tentang melewati array, lihat Menggunakan Passing Arrays refdan out(C # Programming Guide).
Anda tidak dapat menggunakan refdan outkata kunci untuk jenis metode berikut:
Async methods, which you define by using the async modifier.
Iterator methods, which include a yield return or yield break statement.
Contoh
Mendeklarasikan suatu outmetode berguna ketika Anda ingin suatu metode mengembalikan banyak nilai. Contoh berikut digunakan outuntuk mengembalikan tiga variabel dengan pemanggilan metode tunggal. Perhatikan bahwa argumen ketiga ditugaskan ke nol. Ini memungkinkan metode untuk mengembalikan nilai secara opsional. C #
class OutReturnExample
{
static void Method(out int i, out string s1, out string s2)
{
i = 44;
s1 = "I've been returned";
s2 = null;
}
static void Main()
{
int value;
string str1, str2;
Method(out value, out str1, out str2);
// value is now 44
// str1 is now "I've been returned"
// str2 is (still) null;
}
}
outtidak dapat dibaca dari sebelum ditugaskan.reftidak memiliki batasan ini. Jadi begitulah.