I tienen una situación como esta:Adición de un setter a una propiedad virtual en C#
public abstract class BaseClass
{
public abstract string MyProp { get; }
}
Ahora, para algunas de las clases derivadas, el valor de las propiedades es un valores sintetizados, así que no hay setter:
public class Derived1 : BaseClass
{
public override string MyProp { get { return "no backing store"; } }
}
Esto funciona bien. Sin embargo, parte de la clase derivada requería una tienda de respaldo más tradicional. Sin embargo, no importa cómo lo escribo, como en la propiedad automática, o con un almacén de respaldo explícito, me sale un error:
public class Derived2 : BaseClass
{
public override string MyProp { get; private set;}
}
public class Derived3 : BaseClass
{
private string myProp;
public override string MyProp
{
get { return myProp;}
private set { myProp = value;}
}
}
Derived2.MyProp.set ': no se puede anular porque 'BaseClass.MyProp' hace no tiene un acceso de conjunto sobresaliente
¿Cómo hago para que funcione?
Funcionaría si BaseClass fuera una interfaz en lugar de una clase abstracta, lo que sería adecuado para este ejemplo artificial, pero quizás no en su código real. – Mud
Cierto, BaseClass necesita ser una clase. Ha implementado métodos, que no mostré. –
Posible duplicado de [¿Por qué es imposible anular una propiedad getter y agregar un setter?] (Https://stackoverflow.com/questions/82437/why-is-it-impossible-to-override-a-getter -only-property-and-add-a-setter) –