アクセシビリティに関する初心者セッション用のデモコードをいくつか設定しています。派生クラスから内部保護されたプロパティにアクセスできることがわかりました。私は何が欠けていますか?他のアセンブリから依然としてアクセス可能な内部保護プロパティ
アセンブリ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();
}
}
}
アセンブリ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);
}
}
}
私はProp5に値を設定することができますExampleClass.Goで注意してください。どうして?これは内部が保護されたとしてマークされていますが、それはinternal protected
が動作するように意図された方法ですので、私は(内部としてマーク)Prop4上の値
* internal * OR * protected *ですので、 ANDではありません。 –
-1:明らかに、単純なGoogle検索でこの質問に回答していたでしょう... –
私はそれがORであったとは思わなかった –