using System; namespace RevisoesOO { /// /// Summary description for Pessoa. /// public class Pessoa { // // atributos internos da classe // private string nome; private DateTime dataNasc; private string bi; private string nif; // // construtores // public Pessoa() { } public Pessoa(string nm, DateTime dtNasc, string bi, string nif) { nome = nm; dataNasc = dtNasc; // usar o objecto this para desambiguar entre o atributo da classe e o argumento da função this.bi = bi; this.nif = nif; } public Pessoa(Pessoa o) { // invocar método privado Copia(o); } // // Propriedades // // ver sintaxe e regras no help do visual studio // ms-help://MS.VSCC.2003/MS.MSDNQTR.2004APR.1033/csref/html/vclrfUsingProperties.htm // ou no MSDN online // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrfUsingProperties.asp // public string Nome { // código para devolver o conteudo da propriedade - getter ou accessor get { return nome; } // código para alterar o coneteudo da propriedade - setter ou mutator set { nome = value; } } public DateTime DataNascimento { get { return dataNasc; } set { dataNasc = value; } } public string BI { get { return bi; } set { bi = value; } } public string NIF { get { return nif; } set { nif = value; } } // // Operadores // // ver regras no help do Visual Studio // ms-help://MS.VSCC.2003/MS.MSDNQTR.2004APR.1033/csref/html/vclrfOperator.htm // ou MSDN online // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrfoperator.asp // public static bool operator==(Pessoa o1, Pessoa o2) { if (o1.nome == o2.nome && o1.dataNasc == o2.dataNasc && o1.bi == o2.bi && o1.nif == o2.nif) return true; else return false; } public static bool operator!=(Pessoa o1, Pessoa o2) { // definido à custa do anterior return !(o1 == o2); } // // ao definir o operador de igualdade deve também redefinir-se o método Equals() // e o método GetHashCode() definido na classe Object // public override bool Equals(object obj) { // utilizar operador de igualdade já definido return this == (Pessoa)obj; } public override int GetHashCode() { return base.GetHashCode (); } /* // // experimentar o seguinte código com e sem o método Equals() redefinido // Pessoa p1 = new Pessoa(); Pessoa p2 = new Pessoa("alexandre", new DateTime(1969, 07 , 04, 22, 10, 0), "98765432", "201201201"); Pessoa p3 = p2; Pessoa p4 = new Pessoa("alexandre", new DateTime(1969, 07 , 04, 22, 10, 0), "98765432", "201201201"); System.Console.WriteLine("p1 == p2 {0}", p1 == p2); System.Console.WriteLine("p2 == p3 {0}", p2 == p3); System.Console.WriteLine("p2 == p4 {0}\n", p2 == p4); System.Console.WriteLine("p1 != p2 {0}", p1 != p2); System.Console.WriteLine("p2 != p3 {0}", p2 != p3); System.Console.WriteLine("p2 != p4 {0}\n", p2 != p4); System.Console.WriteLine("p1.Equals(p2) {0}", p1.Equals(p2)); System.Console.WriteLine("p2.Equals(p3) {0}", p2.Equals(p3)); System.Console.WriteLine("p2.Equals(p4) {0}\n", p2.Equals(p4)); */ /* // // output com Equals() // p1 == p2 False p2 == p3 True p2 == p4 True p1 != p2 True p2 != p3 False p2 != p4 False p1.Equals(p2) False p2.Equals(p3) True p2.Equals(p4) True // // output sem Equals() // p1 == p2 False p2 == p3 True p2 == p4 True p1 != p2 True p2 != p3 False p2 != p4 False p1.Equals(p2) False p2.Equals(p3) True p2.Equals(p4) False */ // // Métodos auxiliares // private void Copia(Pessoa o) { this.nome = o.nome; this.bi = o.bi; this.dataNasc = o.dataNasc; this.nif = o.nif; } } }