Compilerfehler CS1540
Auf den geschützten Member „member“ kann nicht über einen Qualifizierer vom Typ „type1“ zugegriffen werden. Der Qualifizierer muss vom Typ „type2“ (oder von ihm abgeleitet) sein.
Eine abgeleitete class kann nicht auf geschützte Member der Basisklasse durch eine Instanz der Basisklasse zugreifen. Eine Instanz der Basisklasse, die in der abgeleiteten Klasse deklariert wurde, kann zur Laufzeit eine Instanz eines anderen Typs sein, der von der gleichen Basisklasse abgeleitet ist, aber andernfalls nicht auf die abgeleitete Klasse bezogen werden kann. Da auf geschützte Member nur von abgeleiteten Typen zugegriffen werden kann, werden alle Versuche, auf geschützte Member zuzugreifen, die zur Laufzeit möglicherweise nicht gültig sind, vom Compiler als ungültig markiert.
In der Employee
-Klasse im folgenden Beispiel verfügen emp2
und emp3
jeweils über Typ Person
zur Kompilierzeit, jedoch weist emp2
den Typ Manager
zur Laufzeit auf. Da Employee
nicht von Manager
abgeleitet ist, kann es nicht auf geschützte Member der Basisklasse, Person
, durch eine Instanz der Klasse Manager
zugreifen. Der Compiler kann nicht feststellen, was der Laufzeittyp der beiden Person
-Objekte sein wird. Daher erzeugen sowohl der Aufruf von emp2
als auch von emp3
den Compilerfehler CS1540.
using System;
using System.Text;
namespace CS1540
{
class Program1
{
static void Main()
{
Employee.PreparePayroll();
}
}
class Person
{
protected virtual void CalculatePay()
{
Console.WriteLine("CalculatePay in Person class.");
}
}
class Manager : Person
{
protected override void CalculatePay()
{
Console.WriteLine("CalculatePay in Manager class.");
}
}
class Employee : Person
{
public static void PreparePayroll()
{
Employee emp1 = new Employee();
Person emp2 = new Manager();
Person emp3 = new Employee();
// The following line calls the method in the Employee base class,
// Person.
emp1.CalculatePay();
// The following lines cause compiler error CS1540. The compiler
// cannot determine at compile time what the run-time types of
// emp2 and emp3 will be.
//emp2.CalculatePay();
//emp3.CalculatePay();
}
}
}
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für