Nó được bảo đảm từ quan điểm của Fjuk
nhưng không phải của Main
.
Trong Fjuk
ngoại lệ được ném sau khi thông số được đặt. Trong khi có thể được sắp xếp lại được thực hiện bởi trình biên dịch, jitter và CPU, sẽ không có đơn đặt hàng lại sao cho thứ tự quan sát được bằng một thay đổi luồng đơn lẻ. Vì một chuỗi đơn có thể "chú ý" nếu tham số không được đặt trước khi ngoại lệ được ném, tham số được đảm bảo được đặt.
Trong Main
mặc dù, chúng tôi không có kiến thức về chi tiết thực hiện Fjuk
, vì vậy khi trình biên dịch phân tích Main
, nó không thể phụ thuộc vào điều đó.Do đó trong sự thay đổi mà chúng ta không gán giá trị cho s
trước khi cuộc gọi:
static void Main()
{
string s;
try
{
Fjuk(out s);
Console.WriteLine(s ?? "");//fine
}
catch (Exception)
{
Console.WriteLine(s ?? "");//compiler error
}
Console.WriteLine(s ?? "");//compiler error
}
Nỗ lực đầu tiên sử dụng s
ngay sau khi cuộc gọi đến Fjuk
là tốt, vì mỗi người chỉ có thể đạt được điều đó nếu Fjuk
thành công, và nếu Fjuk
thành công thì s
phải được chỉ định. Tuy nhiên, trong trường hợp thứ hai và thứ ba, có thể đến các đường thẳng đó mà không cần Fjuk
thành công và vì không thể phân tích được Main
cho dù ngoại lệ có thể được ném trước khi s
được đặt hay không, việc sử dụng s
phải bị cấm.
Nguồn
2012-01-18 09:24:29
Tôi không biết về đặc điểm kỹ thuật, nhưng nó chắc chắn là những gì tôi mong đợi. Tôi hy vọng rằng việc khởi tạo các biến thành viên, các thuộc tính vv cũng sẽ vẫn có sẵn trong khối catch của bạn. –
Trường hợp của Eric Lippert khi bạn cần anh ta ... :) –
@jb. Có gì sai với [MSDN] (http://msdn.microsoft.com/en-us/library/t3c3bfhx (v = vs.80) .aspx)? – gdoron