2012-12-20 40 views
5

tôi đã CS0079 biên dịch báo lỗi khi tôi đã cố gắng để chạy các đoạn mã sau:C# CS0079 Event Xử lý Compile Lỗi

public delegate void MyClassEHandler(MyClassEParam param); 

public class MyClassE 
{ 
    public static event MyClassEHandler Error 
    { 
     add 
     { 
       MyClassE.Error = (MyClassEHandler)Delegate.Combine(MyClassE.Error, value); 
     } 
    } 
} 

Lỗi:

CS0079 : The event MyClassE.Error can only appear on the left hand side of += or -=

được tìm kiếm xung quanh nhưng không thể tìm ra cách để giải quyết nó.

THÊM: nếu (MyClass.Error! = Null) hoặc MyClass.Error (null, null);

Nhận cùng lỗi CS0079.

CS0079 : The event MyClassE.Error can only appear on the left hand side of += or -=

Bất kỳ ai có thể giúp tôi về điều này không?

+0

Bạn có thể gửi mã đầy đủ của bạn? –

+0

Mã này có phải là một phần của lớp 'MyClassE' hoặc một phần khác không? – Rafal

+0

có, mã này là một phần của lớp MyClassE. – Chris

Trả lời

6

Bạn không thể đặt sự kiện, bạn chỉ có thể thêm hoặc xóa trình xử lý sự kiện trên đó. Vì vậy, như lỗi nói, bạn chỉ nên làm:

public delegate void MyClassEHandler(MyClassEParam param); 

public static event MyClassEHandler Error 
{ 
    add 
    { 
      MyClassE.Error += value; 
    } 
    remove   
    { 
      MyClassE.Error -= value; 
    } 
} 

Delegate.Combine sẽ làm việc kỳ diệu cho bạn.

+0

Ngoài ra, nó cần truy cập 'remove'. –

+0

Đã thêm, nó được ngụ ý, nhưng cách này tốt hơn :) – SWeko

+0

Tôi có nghĩa là bạn không cần gọi rõ ràng 'Delegate.Combine' như trong đoạn mã của bạn, bạn chỉ cần thực hiện + = và trình xử lý mới được thêm vào lời gọi danh sách. – SWeko

2

Hãy thử điều này

public delegate void MyClassEHandler(MyClassEParam param); 
static MyClassEHandler error; 

public static event MyClassEHandler Error 
{ 
add 
{ 
     MyClassE.error += (MyClassEHandler)Delegate.Combine(MyClassE.Error, value); 
} 

remove 
{ 
     MyClassE.Error -= (MyClassEHandler)Delegate.Combine(MyClassE.Error, value); 
} 

} 

Tham khảo Intercepting add remove of c# event and delegates