No, no lo hace. Acabo de probar con la siguiente clase:
public abstract class Class1
{
public abstract string TestStringAbstract { get; set; }
public string TestString { get; set; }
}
y decompilados en Reflector. Este fue el código generado:
public abstract class Class1
{
// Fields
[CompilerGenerated]
private string <TestString>k__BackingField;
// Methods
protected Class1()
{
}
// Properties
public string TestString
{
[CompilerGenerated]
get
{
return this.<TestString>k__BackingField;
}
[CompilerGenerated]
set
{
this.<TestString>k__BackingField = value;
}
}
public abstract string TestStringAbstract { get; set; }
}
Como puede ver, solo se generó un solo campo de respaldo para la propiedad concreta. El resumen fue dejado como una definición.
Esto tiene sentido lógico ya que la propiedad debe ser anulada por cualquier clase secundaria; no tiene sentido crear un campo de respaldo que no habría forma de acceder nunca (ya que no se puede acceder a la propiedad abstracta).
Por otro lado, una propiedad virtual creará un campo de respaldo y cualquier clase que anule la propiedad con un reemplazo implementado automáticamente creará su propio campo de respaldo en el nivel de esa clase.
Gracias, el código descompilado lo deja muy claro. ¿Cómo se hace eso con Resharper? –
Solo para evitar confusiones, ese es el código * resharper * reconstruido a partir de IL. Es ** no ** el código que generó el compilador. El compilador genera IL, no C#. –
Lo siento, no me refiero a Resharper. Quise decir * Reflector * de aquí (http://www.red-gate.com/products/reflector/). He editado para aclarar –