我會更好地記錄這個問題。此代碼
ref class Test sealed {
public:
event EventHandler^ blah;
};
產生:
警告:CA1047:Microsoft.Design:請會員 '測試::胡說::加薪(對象^,^ EventArgs的)' 公營,私營,或內部
是的,當你沒有自己指定事件訪問器時,編譯器會爲你生成它們。它會自動生成添加,刪除和提高訪問器。後者看起來是這樣的,當你看與程序Ildasm.exe:
.method family hidebysig specialname instance void
raise_blah(object value0,
class [mscorlib]System.EventArgs value1) cil managed
{
// etc..
}
的家庭屬性是什麼原因造成的代碼分析警告。自動生成的添加和刪除訪問器當然是公共的。自己編寫它們是一個值得商榷的解決方法,如果您有實際的原因來實現自定義訪問器,則只需要這樣做。樣板版本看起來像這樣:
using namespace System::Runtime::CompilerServices;
ref class Test sealed {
private:
EventHandler^ foo;
public:
event EventHandler^ blah {
[MethodImpl(MethodImplOptions::Synchronized)]
void add(EventHandler^ d) { foo += d; }
[MethodImpl(MethodImplOptions::Synchronized)]
void remove(EventHandler^ d) { foo -= d; }
private:
void raise(Object^ sender, EventArgs^ e) {
EventHandler^ handler = foo;
if (handler != nullptr) handler(sender, e);
};
}
};
那麼,這肯定會抑制警告。如果不能旋轉螺旋槳,我建議您使用[SuppressMessage]屬性。
你能舉一個最簡單的例子嗎? – 2010-12-02 18:36:14