Bạn có thể sử dụng outtừ 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ư reftừ khóa, ngoại trừ refyêu cầu biến được khởi tạo trước khi nó được thông qua. Để sử dụng một outtham số, cả định nghĩa phương thức và phương thức gọi đều phải sử dụng outtừ 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ù refvà outtừ 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 refhoặ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 outtham số.
Để biết thông tin về việc truyền mảng, hãy xem Mảng sử dụng refvà out(Hướng dẫn lập trình C #).
Bạn không thể sử dụng refvà outtừ 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 outphươ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;
}
}
outkhông thể được đọc từ trước khi nó được gán.refkhông có hạn chế này. Vì vậy, có đó.