Das folgende Beispiel stammt aus C# in Depth: What you need to master C# 2 and 3 und scheint nur eine brechende Änderung zu verursachen, wie jskeet festgestellt hat, aber falsch sein. Bitte erläutern:Contravarianz scheint ein konfliktbehaftetes Verhalten zu verursachen
delegate void SampleDelegate(string x);
public void CandidateAction (string x)
{
Console.WriteLine("Snippet.CandidateAction")
}
public class Derived: Snippet
{
public void CandidateAction (object x)
{
Console.WriteLine("Derived.CandidateAction")
}
}
....
Derived x = new Derived();
SampleDelegate factory = new SampleDelegate (x.CandidateAction);
factory ("test");
Nun, warum sollte es überhaupt als SampleDelegate Zeichenfolge akzeptieren arbeiten nicht das Objekt. Und meines Wissens ist Objekt nicht von der Zeichenkette abgeleitet. Es ist umgekehrt. Das erlaubt Contravarianz unter C# 2.0. Das scheint den gegenteiligen Effekt zu demonstrieren.
Dank