puede ser que esto ayudará a:
abstracta clase padre:
public abstract class Animal
{
private string name;
public Animal(string name)
{
this.Name = name;
}
public Animal() { }
public string Name
{
get { return this.name; }
set { this.name = value; }
}
public virtual void talk()
{
Console.WriteLine("Hi,I am an animal");
}
}
clase con el constructor protegido:
public class Lion : Animal
{
private string yahoo;
protected Lion(string name) : base(name)
{
this.Yahoo = "Yahoo!!!";
}
public string Yahoo
{
get
{
return yahoo;
}
set
{
yahoo = value;
}
}
public Lion() { }
}
clase derivada de la clase Kiara Lion:
public class Kiara : Lion
{
public Kiara(string name) : base(name)
{
}
public override void talk()
{
Console.WriteLine("HRRRR I'm a Kiara");
}
public Kiara() { }
}
clase derivada de la clase Simba Lion:
public class Simba : Lion
{
public Simba(string name) : base(name)
{
}
public override void talk()
{
Console.WriteLine("HRRRR I'm a {0} and this is my daughter:{1} {2}",
new Simba("Simba").Name,
new Kiara("Kiara").Name,
new Simba("Simba").Yahoo);
}
public Simba() { }
}
aplicación de la función principal:
public static void Main(string[] args)
{
Animal lion = new Simba();
lion.Name = "Simba";
lion.talk();
Animal lion1 = new Kiara();
lion1.Name = "Kiara";
lion1.talk();
}
"pero me gustaría que no insto para hacerlo "¿por qué no? Lo necesito para la prueba. tal vez eso tenga sentido, después de todo? –
@Arnis L .: En ese punto, estás haciendo poco más que inventar un truco para hacer una prueba, que es tan útil como no escribir la prueba. Este es un buen momento para dar un paso atrás y echar un vistazo a _por qué_ este constructor está 'protegido', ya que implica que el comportamiento que busca (y está probando) está explícitamente no respaldado (y, por lo tanto, no se puede probar). – David
@Arnis: por lo general, si necesita eludir el modelo de accesibilidad con reflejo, eso sugiere que no debe tratar de obtener acceso al miembro en cuestión, o debe aumentar la accesibilidad usted mismo. –