Kann jemand erklären den Unterschied, wenn eine zwischenUnterschied zwischen generischen Methode mit Interface-Einschränkung und Verfahren mit Schnittstellenparameter
public void SwapIfGreater<T>(ref T lhs, ref T rhs) where T : System.IComparable
{
T temp;
if (lhs.CompareTo(rhs) > 0)
{
temp = lhs;
lhs = rhs;
rhs = temp;
}
}
Und
public void SwapIfGreater(ref System.IComparable lhs, ref System.IComparable rhs)
{
System.IComparable temp;
if (lhs.CompareTo(rhs) > 0)
{
temp = lhs;
lhs = rhs;
rhs = temp;
}
}
Es scheint mir, sobald Sie Ihre generische Methode einschränken Um nur Parameter zu akzeptieren, die eine Schnittstelle implementieren, können Sie auch Parameter vom Typ Schnittstelle verwenden.
Ihre zweite ermöglicht die Verwendung von Argumenten zweier verschiedener Typen (wahrscheinlich versehentlich). Es wird auch unnötiges Boxen verursachen. – Lee
Sie haben Recht, danke – Tralli
Eigentlich verursacht Ihre erste auch unnötige Boxen der 'rhs' Parameter beim Aufruf von' CompareTo (Objekt) '. Sie können dies vermeiden, indem Sie die Einschränkung in 'where T: IComparable' ändern. –
Lee