View Full Version : C# Interfaces e Properties


stradale
10-03-2008, 15:25
Isto é o que tenho:
public class Pessoa
{
private string nome;

public Pessoa
{
}

public string Nome
{
get
{
return nome;
}
set
{
nome = value;
}
}
}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?

public interface Coiso
{
void Fazcoisas();

string Nome
{
get;
set;
}
}

NoMercy
10-03-2008, 19:13
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?

alfinete
10-03-2008, 19:55
na classe pões





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



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

stradale
11-03-2008, 10:05
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:

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 CoisoFoi 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 :)

NoMercy
11-03-2008, 12:09
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).