Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida no Ex. 4 da Aula 5 - Polimorfismo

O código do exercício não funciona, e não consegui consertar. Ele informa o seguinte erro:

Error    CS0273    The accessibility modifier of the 'Form1.Conta.Saldo.set' accessor must be more restrictive than the property or indexer 'Form1.Conta.Saldo'

O código abaixo é o do exercício já adaptado com a resposta certa da questão:

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        class Conta
        {
            // outros atributos e métodos da Conta
            private double Saldo { get; protected set; }
            public virtual void Atualiza(double taxa)
            {
                this.Saldo += this.Saldo * taxa;
            }
        }
        class ContaPoupanca : Conta
        {
            public override void Atualiza(double taxa)
            {
                base.Atualiza(3 * taxa);
            }
        }
        class ContaCorrente : Conta
        {
            public override void Atualiza(double taxa)
            {
                base.Atualiza(2 * taxa);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {


        }
    }
}

Tentei alterar o atributo Saldo para protected e continua sem funcionar. Se coloco public ele funciona, mas perde o encapsulamento, né?

O que houve aqui e o que faço?

1 resposta
solução!

Coloca suas classes como public. E, para encapsulamento, coloque o set como private para somente a classe Conta ter acesso.

Veja:

        public class Conta
        {
            // outros atributos e métodos da Conta
            private double Saldo { get; private set; }
            public virtual void Atualiza(double taxa)
            {
                this.Saldo += this.Saldo * taxa;
            }
        }
        public class ContaPoupanca : Conta
        {
            public override void Atualiza(double taxa)
            {
                base.Atualiza(3 * taxa);
            }
        }
        public class ContaCorrente : Conta
        {
            public override void Atualiza(double taxa)
            {
                base.Atualiza(2 * taxa);
            }
        }

Teste e veja se deu certo.