2013-04-01 10 views
6

Po prostu zorientowałem się przez przypadek (gdy coś skompilowane, że nie myślałem, że skompiluje), że EventHandler jest nie ograniczone do typu System.EventArgs.Dlaczego nie ma ograniczenia na EventHandler <TEventArgs>?

Oto docs inline:

#region Assembly mscorlib.dll, v4.0.0.0 
// C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll 
#endregion 

namespace System 
{ 
    // Summary: 
    //  Represents the method that will handle an event. 
    // 
    // Parameters: 
    // sender: 
    //  The source of the event. 
    // 
    // e: 
    //  An System.EventArgs that contains the event data. 
    // 
    // Type parameters: 
    // TEventArgs: 
    //  The type of the event data generated by the event. 
    [Serializable] 
    public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e); 
} 

Czy to niedopasowanie pomiędzy Docs i realizacji?

Pytam, bo jestem ciekawy. To wcale nie jest zarzut.

+1

Zastanawiam się, co się dzieje, jeśli zbudować z visual studio 2012 (.NET 4.5) i spróbuj uruchomić go na komputerze bez .net 4.5. (Nie na maszynie z 2012 r., Więc nie mogę sprawdzić teraz) – Will

Odpowiedz

5

Ograniczenie typu zostało usunięte w .net 4.5.

Oto podpis .net 4.5. http://msdn.microsoft.com/en-us/library/db0etb8x%28v=vs.110%29.aspx

[SerializableAttribute] 
public delegate void EventHandler<TEventArgs>(
    Object sender, 
    TEventArgs e 
) 

Oto .net 4.0 podpis. http://msdn.microsoft.com/en-us/library/db0etb8x%28v=vs.100%29.aspx

[SerializableAttribute] 
public delegate void EventHandler<TEventArgs>(
    Object sender, 
    TEventArgs e 
) 
where TEventArgs : EventArgs 
+0

biorąc pod uwagę, że dokumentacja nie uległa zmianie w MSDN Zastanawiam się, czy znaleźliśmy drobny błąd tutaj –

+0

Wyobrażam sobie, że ta zmiana była zamierzona. Pewnie zapomnieli po prostu zaktualizować uwagę na stronie msdn. Nie jestem pewien, gdzie zgłaszasz takie rzeczy. – Will

+0

Uwaga boczna: ostrzeżenie [CA1009] (https://msdn.microsoft.com/en-us/library/ms182133.aspx) również nie zniknęło, więc użycie wszystkiego, co nie pochodzi z EventArgs, nadal będzie wyzwalać ostrzeżenie FxCop. –