C# Interfaces e Properties

stradale

Portugal@Home Member
Isto é o que tenho:
Código:
public class Pessoa
{
    private string nome;

    public Pessoa
    {
    }

    public string Nome
    {
        get
        {
            return nome;
        }
        set
        {
            nome = value;
        }
    }
}
Código:
class Aluno : Pessoa, Coiso
{

    public Aluno()
    {

    }

    public void FazCoisas()
    {
        // etc
    }
}
Isto que se segue (a bold) obviamente que está mal, agora... porquê?

Como é que funcionam as interfaces com properties que vêm por herança duma classe acima?

Código:
public interface Coiso
{
    void Fazcoisas();

[B]     string Nome
    {
        get;
        set;
    }
[/B] }
 
Não há nada de mal com o teu interface (em termos técnicos), é à classe Aluno que lhe está a faltar a implementação da propriedade Nome do interface Coiso, se o queres implementar explicitamente

Alem do mais, não sei se foi engano a escrever, mas o método na classe aluno deveria chamar-se tambem Fazcoisas e não FazCoisas se queres usar este método para implementar o interface Coiso

De resto parece-me que vai compilar. Isto responde á tua pergunta?
 
Última edição:
na classe pões



Código:
namespace  teste
{
    public class Dados
    {

         private string nome="";

         public string  pessoa ()
          {
          nome="xpro";
          return nome;
          }

        public string Nome
        {
            get { return nome; }
            set { nome = value; }
        }
   }

}
no form em que chamas a class para não estarea a fazer uses fazes
(no caso de uma webpage) System.Web.UI.Page

Código:
namespace teste
{
    public partial class Default : System.Web.UI.Page
    {

    Dados d= new Dados();

    d.pessoa();
    
    lblteste= d.Nome;
    }

}
ja deves ter reparado que se tiveres o mesmo namespace da classe no form tens acesso a classe sem fazeres um uses..

atenção nome declarado tem letra minuscula

e Nome da property começa com letra maiuscula , por uma qustão de destinção

não podes por os dois iguais por isso assim ficam destintos para controlo melhor do code


espero que ajude
 
Última edição:
Não há nada de mal com o teu interface (em termos técnicos), é à classe Aluno que lhe está a faltar a implementação da propriedade Nome do interface Coiso, se o queres implementar explicitamente
A classe Aluno não vai herdar as propriedades de Pessoa?

Ontem estava assim:

Código:
Aluno joaoA = new Aluno()

joaoA.Nome = "joao";

joaoP Pessoa = (Pessoa) joaoA;
Não era possível primeiro fazer cast para Pessoa e só depois alterar o nome.

Hoje, por alguma razão já funciona, com o mesmo código (reescrito). Provavelmente ao reescrevê-lo lá corrigi um erro de que não me estava a aperceber.

Alem do mais, não sei se foi engano a escrever, mas o método na classe aluno deveria chamar-se tambem Fazcoisas e não FazCoisas se queres usar este método para implementar o interface Coiso
Foi engano sim. As classes nem são estas, foram apenas para servir de exemplo.


De qualquer maneira, obrigado NoMercy e obrigado alfinete pela atenção! Kudos para os dois :)
 
A classe Aluno não vai herdar as propriedades de Pessoa?

Sim, herda, mas como a classe Aluno implementa o interface Coiso e o interface Coiso tem uma definição de Nome, tu poderias querer implementar explicitamente uma definição da propriedade Nome na classe Aluno (diferente da implementação na classe Pessoa).
 
Back
Topo