Bạn có thể sử dụng out
từ khóa theo ngữ cảnh trong hai ngữ cảnh (mỗi ngữ cảnh là một liên kết đến thông tin chi tiết), như một công cụ sửa đổi tham số hoặc trong khai báo tham số loại chung trong giao diện và đại biểu. Chủ đề này thảo luận về công cụ sửa đổi tham số, nhưng bạn có thể xem chủ đề khác này để biết thông tin về khai báo tham số loại chung.
Các out
đối số nguyên nhân từ khóa để được thông qua tham khảo. Điều này giống như ref
từ khóa, ngoại trừ ref
yêu cầu biến được khởi tạo trước khi nó được thông qua. Để sử dụng một out
tham số, cả định nghĩa phương thức và phương thức gọi đều phải sử dụng out
từ khóa một cách rõ ràng . Ví dụ: C #
class OutExample
{
static void Method(out int i)
{
i = 44;
}
static void Main()
{
int value;
Method(out value);
// value is now 44
}
}
Mặc dù các biến được truyền dưới dạng out
đối số không phải được khởi tạo trước khi được truyền, nhưng phương thức được gọi là bắt buộc để gán giá trị trước khi phương thức trả về.
Mặc dù ref
và out
từ khóa gây ra hành vi thời gian chạy khác nhau, chúng không được coi là một phần của chữ ký phương thức tại thời điểm biên dịch. Do đó, các phương thức không thể bị quá tải nếu khác biệt duy nhất là một phương thức lấy một ref
đối số và phương thức kia lấy một out
đối số. Ví dụ, đoạn mã sau sẽ không biên dịch: 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) { }
}
Quá tải có thể được thực hiện, tuy nhiên, nếu một phương thức lấy một ref
hoặc một out
đối số và phương thức kia không sử dụng, như thế này: C #
class OutOverloadExample
{
public void SampleMethod(int i) { }
public void SampleMethod(out int i) { i = 5; }
}
Các thuộc tính không phải là biến và do đó không thể được truyền dưới dạng out
tham số.
Để biết thông tin về việc truyền mảng, hãy xem Mảng sử dụng ref
và out
(Hướng dẫn lập trình C #).
Bạn không thể sử dụng ref
và out
từ khóa cho các loại phương pháp sau:
Async methods, which you define by using the async modifier.
Iterator methods, which include a yield return or yield break statement.
Thí dụ
Khai báo một out
phương thức là hữu ích khi bạn muốn một phương thức trả về nhiều giá trị. Ví dụ sau sử dụng out
để trả về ba biến với một lệnh gọi phương thức. Lưu ý rằng đối số thứ ba được gán cho null. Điều này cho phép các phương thức trả về giá trị tùy chọn. 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;
}
}
out
không thể được đọc từ trước khi nó được gán.ref
không có hạn chế này. Vì vậy, có đó.