Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A védett tag "tag" nem érhető el "type1" típusú minősítőn keresztül; a minősítő típusának "2" típusúnak kell lennie (vagy abból kell származnia)
A származtatott osztályok nem férhetnek hozzá az alaposztály védett tagjaihoz az alaposztály egy példányán keresztül. A származtatott osztályban deklarált alaposztály egy példánya futtatáskor más típusú példány lehet, amely ugyanabból az alapból származik, de más módon nem kapcsolódik a származtatott osztályhoz. Mivel a védett tagok csak származtatott típusok használatával érhetők el, a fordító érvénytelenként jelöli meg azokat a védett tagok elérésére tett kísérleteket, amelyek futásidőben érvénytelenek lehetnek.
Az alábbi példában szereplő osztályban a fordítási időpontban mindkettő típussal Person rendelkezik, de emp2 futásidőben van begépelveManager.Employee emp2 emp3 Mivel Employee nem származik belőle Manager, nem fér hozzá az alaposztály Personvédett tagjaihoz az Manager osztály egy példányán keresztül. A fordító nem tudja meghatározni a két Person objektum futásidejének típusát. Ezért a cs1540-et okozó fordítási hiba hívása emp2 és hívása emp3 is.
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();
}
}
}