To nie ma żadnego znaczenia i nie ma optymalizacji. Wygenerowana IL z rzutem i bez obsady jest dokładnie taka sama. W rzeczywistości podczas otwierania mscorlib z reflektorem, mówi tylko return this._sb.ToString();
.
Jak powiedział ToString()
jest virtual
, a nie zaznaczono new
w StringWriter
, więc wygenerowany IL dotyczy Object.ToString()
(początkowo uznane metody) w każdym przypadku (z wyjątkiem niektórych typów podstawowych wartości):
ldfld class System.Text.StringBuilder System.IO.StringWriter::_sb
callvirt instance string System.Object::ToString()
Nawet patrząc na kod źródłowy CLI 2.0, kod jest następujący:
public override String ToString() {
return _sb.ToString();
}
Jedyną różnicą według reflektor jest to, że jest StringBuilder.ToString()
unsafe
. W IL nie ma słowa kluczowego, ale można to sprawdzić, sprawdzając niebezpieczne instrukcje. R # może uważać to za różnicę (choć tak nie jest) i woli iść wyraźnie.
Co otrzymuję przez dekompilację klasy 'StringWriter' to:' return this._sb.ToString(); '. –