Weil Sie versuchen, von außerhalb der Klasse auf geschützte Methode zuzugreifen. Nur öffentliche Methoden sind verfügbar. Sie können die Eigenschaft/variabel/Methode zuzugreifen, die geschützt ist, nur in der vererbten Klasse, aber nicht von äußeren Code:
public class Full: Access.Job
{
public void mVoid()
{
Console.WriteLine(this.JobName);
}
protected void mProtVoid()
{
Console.WriteLine(this.JobName);
}
private void mPrivateVoid()
{
Console.WriteLine("Hey");
}
}
Full myFull = new Full();
myFull.mVoid(); //will work
myFull.mProtVoid(); //Will not work
myFull.mPrivateVoid(); //Will not work
Wenn Sie müssen die geschützte Eigenschaft zu erhalten, gibt es zwei Möglichkeiten (3 tatsächlich, aber Reflexion ist die schmutzige Art und Weise und sollte vermieden werden):
1. Machen Sie es öffentlich
Wenn es wird öffentlich festgelegt werden, wird es erben werden stil und Sie können direkt darauf zugreifen:
Full nFull = new Full();
Console.Write(nFull.JobName);
2. Stellen Sie ein „Wrapper“/„Fassade“
Erstellen Sie neue Eigenschaft oder eine Methode, die die verborgene Eigenschaft zugreifen einfach und schicken Sie es in erwarteten Format.
public class Full: Access.Job
{
public string WrappedJobName { get { return this.JobName; } }
public string WrappedJobName => this.JobName; //C# 6.0 syntax
}
Full mFull = new Full();
Console.WriteLine(mFull.WrappedJobName);
Sie können Jobnamen in Ihrer Full-Klasse zugreifen, aber nicht durch eine vollständige Referenz wie ful –
Sie diese Eigenschaft nur in der Full-Klasse zugreifen kann, nicht außerhalb der Klasse. Wenn Sie "protected string Job {get {return this.JobName;}}" in der Full-Klasse hinzufügen, können Sie diese auch außerhalb der Full-Klasse verwenden. – Julo
Nein, ich bin nicht in der Lage, auf den Job zuzugreifen, aber ich kann auf –