Cú pháp trả về một sự kiện từ một hàm là gì? (Không gọi sự kiện này, để trả lại nó để nó có thể bị ràng buộc với các chức năng).Trả về một sự kiện từ một hàm
Tôi có một lớp chứa chứa từ điển mà mỗi thành viên có một sự kiện.
Mục đích là để có thể viết một cái gì đó như thế này:
lớpContainer c = new Container();
c.CreateEventForKey("a"); // Create the member in the dictionary
c.EventForKey("a") += some_function; // Bind some_function to the event in the "a" member
c.OnEventForKey("a","b"); // Calls some_function with argument "b"
Các container trông như thế này:
public class Container {
public class Member {
public event Action<string> AnEvent;
public void OnEvent(string v) { if(AnEvent!=null) { AnEvent(v); } }
}
protected Dictionary<string,Member> members;
// This seems to work OK.
public void OnEventForKey(string k, string v) {
if (members.ContainsKey(k)) { members[k].OnEvent(v); }
else { /* report error */ }
}
// Can't get this to compile.
public event Action<string> EventForKey(string k) {
if (members.ContainsKey(k)) { return members[k].AnEvent; }
else { /* report error */ }
}
}
Làm thế nào tôi có thể xác định EventForKey
để điều này làm những gì tôi mong đợi?
Tôi không nghĩ bạn có thể trả lại sự kiện, nhưng bạn có thể trả lại một đại biểu có thể bị ràng buộc vào một sự kiện. Đó có phải là ý bạn không? –
Tôi nghĩ bạn chỉ cần loại bỏ từ khóa sự kiện khỏi khai báo AnEvent của bạn, cũng như từ kiểu trả về của EventForKey. –
@IanNewson - phần quan trọng của những gì tôi đang gặp phải là 'c.EventForKey (" a ") + = some_function;'. Tôi muốn viết nó hơn là cồng kềnh 'c.members [" a "]. AnEvent + = some_function', (như tôi có thể thêm lỗi kiểm tra và đăng nhập vào phiên bản đầu tiên, nhưng không phải để lần thứ hai). –