Tôi có một tình huống mà tôi cần phải tạo ra một vài đại biểu vô danh tương tự. Dưới đây là ví dụ:Kỹ thuật C# để tạo các đại biểu ẩn danh chia sẻ cùng một biến đóng cửa
public void Foo(AnotherType theObj)
{
var shared = (SomeType)null;
theObj.LoadThing +=() =>
{
if(shared == null)
shared = LoadShared();
return shared.Thing;
};
theObj.LoadOtherThing +=() =>
{
if(shared == null)
shared = LoadShared();
return shared.OtherThing;
};
// more event handlers here...
}
Sự cố tôi gặp phải là mã của tôi không phải là DRY. Nội dung của mỗi trình xử lý sự kiện tương tự như EXTREMELY và có thể dễ dàng được tham số hóa thành phương thức nhà máy. Điều duy nhất ngăn cản tôi làm điều đó là mỗi đại biểu cần chia sẻ tham chiếu đến biến số shared
. Tôi không thể chuyển shared
vào phương thức nhà máy với từ khóa ref
, dưới dạng you can't create a closure around a ref
varaiable. Bất kỳ ý tưởng?
Bạn đang trả lại thứ gì đó từ bộ xử lý ngay cả? Tôi nghĩ đó là một điều thực sự không bình thường, đặc biệt là bạn có thể thêm nhiều người xử lý hơn vào một sự kiện và chỉ giá trị của người cuối cùng mới được sử dụng. Có lẽ một tài sản đại biểu sẽ phù hợp hơn cho bạn? – svick
Một thuộc tính ủy nhiệm có thể được gọi ra bên ngoài lớp, đó không phải là thứ tôi muốn.Ngữ nghĩa 'sự kiện', nơi mọi người có thể đính kèm, nhưng chỉ có lớp có thể gọi, là những gì tôi cần trong trường hợp này. – FMM
Tôi nghĩ rằng một tài sản ủy quyền chỉ viết phù hợp hơn. Mặc dù nó vẫn còn khá lạ. – svick