8

chúng ta hãy chỉ nói rằng tôi có:Tạo sự kiện để xem cho một sự thay đổi của biến

public Boolean booleanValue; 

public bool someMethod(string value) 
{ 
    // Do some work in here. 
    return booleanValue = true; 
} 

Làm thế nào tôi có thể tạo một event handler mà cháy lên khi booleanValue đã thay đổi? Có thể không?

+0

Đây có phải là biểu mẫu chiến thắng, ASP.Net hoặc Silverlight/WPF không? –

+0

Đây là ứng dụng kiểu Windows 8 Metro. Nhưng tôi sẵn sàng chấp nhận câu trả lời cho bất cứ điều gì khác trong C# (ngoài Silverlight) – Arrow

Trả lời

12

Tránh sử dụng các trường công khai làm quy tắc chung. Cố gắng giữ riêng tư nhiều nhất có thể. Sau đó, bạn có thể sử dụng thuộc tính trình bao bọc để kích hoạt sự kiện của mình. Xem ví dụ:

class Foo 
{ 
    Boolean _booleanValue; 

    public bool BooleanValue 
    { 
     get { return _booleanValue; } 
     set 
     { 
      _booleanValue = value; 
      if (ValueChanged != null) ValueChanged(value); 
     } 
    } 

    public event ValueChangedEventHandler ValueChanged; 
} 

delegate void ValueChangedEventHandler(bool value); 

Đó là cách đơn giản, "bản địa" để đạt được những gì bạn cần. Có nhiều cách khác, thậm chí được cung cấp bởi .NET Framework, nhưng cách tiếp cận trên chỉ là một ví dụ.

3
  1. Thay đổi quyền truy cập của BooleanValue thành riêng tư và chỉ cho phép thay đổi quyền truy cập thông qua một phương pháp nhất quán.

  2. cháy sự kiện tùy chỉnh của bạn trong phương pháp mà

.

private bool _boolValue; 

public void ChangeValue(bool value) 
{ 
    _boolValue = value; 
    // Fire your event here 
} 

Phương án 2: Làm cho nó một tài sản và bắn sự kiện trong setter

public bool BoolValue { get { ... } set { _boolValue = value; //Fire Event } } 

Edit: Như những người khác đã nói INotifyPropertyChanged là cách tiêu chuẩn .NET để làm điều này.

2
CallingClass.BoolChangeEvent += new Action<bool>(AddressOfFunction); 

Trong lớp học của bạn với các thủ tục tài sản bool:

public event Action<bool> BoolChangeEvent; 
public Boolean booleanValue; 
public bool someMethod(string value) 
{ 
    // Raise event to signify the bool value has been set. 
    BoolChangeEvent(value); 

    // Do some work in here. 
    booleanValue = true; 
    return booleanValue; 
} 
2

Không nó không thể * để nhận được thông báo về những thay đổi về giá trị của một biến.

Bạn có thể đạt được hầu hết những gì bạn muốn bằng cách đặt giá trị thành thuộc tính của một số lớp và kích hoạt sự kiện khi bạn muốn.

*) nếu mã của bạn là trình gỡ lỗi cho một quy trình, bạn có thể làm cho CPU thông báo cho bạn về các thay đổi - xem các điểm ngắt dữ liệu trong Visual Studio. Điều này sẽ yêu cầu ít nhất một số mã nguồn gốc và khó thực hiện chính xác hơn đối với mã được mang theo do các đối tượng được di chuyển trong bộ nhớ bởi GC.