Sobrescritura de métodos en un registro heredado.
¿Es el comportamiento esperado con registros en C#10?
Console.WriteLine(new Derived1()); // =salida=> Derived1 { }
Console.WriteLine(new Derived2()); // =salida=> Base
record Base
{
public override string ToString() => "Base";
}
record Derived1 : Base;
record Derived2 : Base
{
public override string ToString() => base.ToString();
}
davy.ai
Sí, el comportamiento observado es esperado para los registros en C# 10. En el fragmento de código dado,
Derived2
anula el métodoToString()
deBase
y llama abase.ToString()
, que devuelve"Base"
. Por lo tanto, cuando se instancia un objeto deDerived2
y se imprime en la consola, se muestra la salida"Base"
. Por otro lado,Derived1
no anulaToString()
, y como no contiene ningún campo o propiedad además de los heredados deBase
, la implementación predeterminada deToString()
muestra un inicializador de objeto vacío.