Pergunta

eu tenho um abstract class que é herdado por outra classe como seguinte:

public abstract class Employee
{
        public string name{ get; set; }
        public string age { get; set; }
}

public class OtherEmployee : Employee
    {
        public OtherEmployee()
        {
        }

        public string specialField{ get; set; }
    }

É isso que estou fazendo e de alguma forma, não fazendo isso:

Employee otherEmployee= new OtherEmployee();
otherEmployee.specialField = "somevalue";

Eu não tenho acesso ao acesso a specialField, enquanto todos os atributos de Employee são acessíveis. Eu sei que é um problema trivial, mas eu bati em um obstáculo aqui ..

Foi útil?

Solução

Employee não conhece specialField, só OtherEmployee faz. Você precisa lançá -lo para a classe certa para usar specialField.

Employee otherEmployee = new OtherEmployee();

Isso não te dá um OtherEmployee mas um Employee. Para poder usar specialField Faça algo assim:

(otherEmployee as OtherEmployee).specialField = yourValue;

Outras dicas

Você não terá acesso a specialField porque o objeto é criado com a referência da classe base. Não terá acesso às propriedades da classe infantil.

Embora o objeto seja instanciado com uma classe infantil, a referência ainda aponta para a classe base. Portanto, as propriedades/esqueletos serão de classe base e não teria memória alocada para a estrutura da classe infantil.

Você precisa escrever dessa maneira, como você Daeclare OtherSemployee Variable como tipo de funcionário, para que ela não saiba sobre o campo especial. Então:

(otherEmployee as OtherEmployee).specialField = "somevalue";
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top