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;
}
}
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 :)
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).