Bạn có thể sử dụng Post Sharp để chặn yêu cầu thay đổi giá trị thuộc tính. Bạn có thể có tất cả các lớp tìm kiếm được kế thừa từ một lớp chung với một số List<string>
. Sau đó, tạo thuộc tính aspect để thêm tên thuộc tính vào từ điển đó bất cứ khi nào giá trị thay đổi. Sau đây chỉ là một mẫu, và có lỗi:
[Serializable]
public class PropertyChangeAwareAttribute : OnMethodBoundaryAspect
{
public override void OnEntry(MethodExecutionEventArgs eventArgs)
{
if (eventArgs.Method.Name.StartsWith("set_"))
((SearchBagBase)eventArgs.Instance).PropertiesChanged.Add(eventArgs.Method.Name);
base.OnEntry(eventArgs);
}
}
abstract class SearchBagBase
{
public List<string> PropertiesChanged = new List<String>();
}
[PropertyChangeAware]
class RegularSearch : SearchBagBase
{
public String Key { get; set; }
}
với việc sử dụng:
RegularSearch regularSearch = new RegularSearch();
regularSearch.Key = "toys";
regularSearch.PropertiesChanged.ForEach(Console.WriteLine);
Nguồn
2010-10-17 19:35:46
Trong tâm trí của tôi, đây là một cách hoàn toàn hợp lệ để làm điều đó trừ khi bạn có mối quan tâm hiệu suất lớn. – steinar
Không chắc chắn đó là cách tốt hơn nhưng bạn có thể triển khai giao diện INotifyPropertyChanged. –