Trong khi tôi chơi với C# 4.0 năng động, tôi thấy những điều kỳ lạ xảy ra với mã như thế này:System.Dynamic bug?
using System.Dynamic;
sealed class Foo : DynamicObject
{
public override bool TryInvoke(
InvokeBinder binder, object[] args, out object result)
{
result = new object();
return true;
}
static void Main()
{
dynamic foo = new Foo();
var t1 = foo(0);
var t2 = foo(0);
var t3 = foo(0);
var t4 = foo(0);
var t5 = foo(0);
}
}
Ok, nó hoạt động nhưng ... hãy nhìn vào IntelliTrace cửa sổ:
screenshot http://img717.imageshack.us/img717/4914/10435230.png
Vì vậy, mọi sự xâm nhập (và các hoạt động khác nữa đối với đối tượng động) khiến cho việc ném và bắt các ngoại lệ lạ hai lần! Tôi hiểu rằng cơ chế ngoại lệ đôi khi có thể được sử dụng để tối ưu hóa, ví dụ như cuộc gọi đầu tiên đến động có thể được thực hiện cho một số đại biểu sơ khai, chỉ đơn giản là ném ngoại lệ - điều này có thể giống như tín hiệu cho chất kết dính động để giải quyết một thành viên chính xác và ủy nhiệm lại điểm. Cuộc gọi tiếp theo tới cùng một đại biểu sẽ được thực hiện mà không cần bất kỳ séc nào.
Nhưng ... hành vi của mã ở trên trông rất lạ. Có thể ném và bắt ngoại lệ hai lần cho mỗi hoạt động trên DynamicObject - là một lỗi?
ảnh chụp màn hình bị mất;) – TomTom
lạ, tất cả là tốt cho tôi ... tái tải lên imageshack, thx – ControlFlow