Estoy configurando un código de demostración para una sesión de principiante sobre accesibilidad y descubrí que puedo acceder a una propiedad interna protegida desde una clase derivada. ¿Qué me estoy perdiendo?propiedad protegida interna aún accesible desde un ensamblaje diferente
Asamblea 1
namespace Accessibility
{
class Program
{
static void Main(string[] args)
{
ExampleClass c = new ExampleClass();
c.Go();
//c.Prop1 = 10;
}
}
class ExampleClass : DerivedClass
{
public void Go()
{
this.Prop1 = 10;
this.Prop2 = 10;
//this.Prop3 = 10; //Doesn't work
//this.Prop4 = 10; //Doesn't work
this.Prop5 = 10; //why does this work?!
this.DoSomething();
}
}
}
Asamblea 2
namespace Accessibility.Models
{
public class BaseClass
{
public int Prop1 { get; set; }
protected int Prop2 { get; set; }
private int Prop3 { get; set; }
internal int Prop4 { get; set; }
internal protected int Prop5 { get; set; }
//internal public int Prop6 { get; set; } //Invalid
//internal private int Prop7 { get; set; } //Invalid
public BaseClass()
{
this.Prop3 = 27;
}
}
public class DerivedClass : BaseClass
{
public void DoSomething()
{
this.Prop1 = 10;
this.Prop2 = 10;
//this.Prop3 = 10; //Doesn't work
this.Prop4 = 10;
this.Prop5 = 10;
PropertyInfo Prop3pi = typeof(DerivedClass).GetProperty("Prop3", BindingFlags.Instance | BindingFlags.NonPublic);
int value = (int)Prop3pi.GetValue(this, null);
}
}
}
Aviso en ExampleClass.Go puedo establecer un valor a Prop5. ¿Por qué? Está marcado como interno protegido pero no puedo establecer un valor en Prop4 (marcado como interno)
Porque es * interno * O * protegido *. No AND. –
-1: Obviamente, una simple búsqueda en Google habría respondido a esta pregunta ... –
No pensé que era O –