// tipski sigurna (type-safe) implementacija
 public bool Equals(Osoba obj)
 {
     // Implementirati tipski sigurnu usporedbu tako da metoda Main prođe bez problema
     if(string.Format("'{0}, {1}'", m_ime, m_matičniBroj) == obj.ToString() )
         return true;
     return false;
 }
        static void Main(string[] args)
        {
            // dvije osobe s različitim imenima i MB
            Osoba osobaA = new Osoba("Janko", 1);
            Osoba osobaB = new Osoba("Darko", 2);
            Debug.Assert((osobaA == osobaB) == false);
            Debug.Assert(osobaA != osobaB);

            // novi "Janko" s drugim matičnim brojem
            osobaB = new Osoba("Janko", 2);
            Debug.Assert((osobaA == osobaB) == false);
            Debug.Assert(osobaA != osobaB);

            // novi "Janko" s istim matičnim brojem
            osobaB = new Osoba("Janko", 1);
            Debug.Assert(osobaA == osobaB);
            Debug.Assert((osobaA != osobaB) == false);

            osobaB = osobaA;
            Debug.Assert(osobaA == osobaB);
            Debug.Assert((osobaA != osobaB) == false);

            osobaB = null;
            Debug.Assert((osobaA == osobaB) == false);
            Debug.Assert(osobaA != osobaB);

            osobaA = null;
            Debug.Assert(osobaA == osobaB);
            Debug.Assert((osobaA != osobaB) == false);

            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Usporedba referenci na isti objekt:");
            Osoba osobaA = new Osoba("Janko", 1);
            Osoba osobaB = osobaA;
            UsporedbaOsoba(osobaA, osobaB);
            Console.WriteLine();

            Console.WriteLine("Usporedba s null referencom na objekt istog tipa:");
            UsporedbaOsoba(osobaA, null);
            Console.WriteLine();

            Console.WriteLine("Usporedba dviju osoba s različitim imenima i matičnim brojevima:");
            osobaB = new Osoba("Marko", 2);
            UsporedbaOsoba(osobaA, osobaB);
            Console.WriteLine();

            Console.WriteLine("Usporedba dviju osoba s isitim imenima i različitim matičnim brojevima:");
            osobaB = new Osoba("Janko", 5);
            UsporedbaOsoba(osobaA, osobaB);
            Console.WriteLine();

            Console.WriteLine("Usporedba dviju osoba s isitim imenima i istim matičnim brojevima:");
            osobaB = new Osoba("Janko", 1);
            UsporedbaOsoba(osobaA, osobaB);
            Console.WriteLine();

            Console.WriteLine("Usporedba bezimene osobe s osobom koja ima ime:");
            osobaB = new Osoba(null, 2);
            UsporedbaOsoba(osobaA, osobaB);
            Console.WriteLine();

            Console.WriteLine("GOTOVO!!!");
            Console.ReadKey();
        }
 public static Osoba PozivMetodePromijeniOsobu(Osoba osoba, string novoIme, int noviMatičniBroj)
 {
     Console.WriteLine(string.Format("Prije metode PromijeniOsobu: {0}", osoba));
     PromijeniOsobu(osoba, novoIme, noviMatičniBroj);
     Console.WriteLine(string.Format("Nakon metode PromijeniOsobu: {0}", osoba));
     return osoba;
 }
        public static void UsporedbaOsoba(Osoba osobaA, Osoba osobaB)
        {
            Console.WriteLine(osobaA);
            Console.WriteLine(osobaB);

            try
            {
                Console.WriteLine(osobaA.Equals(osobaB));
            }
            catch (NullReferenceException)
            {
                Console.WriteLine("POGREŠKA: osobaA je null referenca pa nema metodu Equals!");
            }
            try
            {
                Console.WriteLine(osobaB.Equals(osobaA));
            }
            catch (NullReferenceException)
            {
                Console.WriteLine("POGREŠKA: osobaB je null referenca pa nema metodu Equals!");
            }

            // poziv statičke metode
            Console.WriteLine(Osoba.Equals(osobaA, osobaB));

            Console.WriteLine(Osoba.ReferenceEquals(osobaA, osobaB));
        }
 public bool Equals(Osoba obj)
 {
     // Preslikati implementaciju metode Equals iz EqualsRefTip
     if (string.Format("'{0}, {1}'", m_ime, m_matičniBroj) == obj.ToString())
         return true;
     return false;
 }
        static void Main(string[] args)
        {
            Osoba osobaA = new Osoba("Janko", 1);
            Osoba osobaB = osobaA;
            Jednakost(osobaA, osobaB);

            // novi "Janko" s istim matičnim brojem
            osobaB = new Osoba("Janko", 1);
            Jednakost(osobaA, osobaB);

            // novi "Janko" s drugim matičnim brojem
            osobaB = new Osoba("Janko", 2);
            Jednakost(osobaA, osobaB);

            // dvije osobe s različitim imenima i MB
            osobaB = new Osoba("Darko", 2);
            Jednakost(osobaA, osobaB);

            osobaB = null;
            Jednakost(osobaA, osobaB);

            osobaA = null;
            Jednakost(osobaA, osobaB);

            Console.WriteLine("GOTOVO!!!");
            Console.ReadKey();
        }
        public static void UsporedbaOsoba(Osoba osobaA, Osoba osobaB)
        {
            Console.WriteLine(osobaA);
            Console.WriteLine(osobaB);

            Console.WriteLine(osobaA.Equals(osobaB));
            Console.WriteLine(osobaB.Equals(osobaA));
        }
        public void EqualsZaReferentniTip_UsporedbaSNullReferencomVraćaFalse()
        {
            Osoba o1 = new Osoba("Janko", 1);
            Osoba o2 = null;

            Assert.IsFalse(o1.Equals(o2));
            Assert.IsFalse(Osoba.Equals(o1, o2));
            Assert.IsFalse(Osoba.ReferenceEquals(o1, o2));
        }
 public bool Equals(Osoba obj)
 {
     // Preslikati implementaciju metode Equals iz EqualsRefTip
     if (this.GetType() != obj.GetType())
         return false;
     Osoba a = (Osoba)obj;
     if ((Osoba.Equals(this.m_ime, a.m_ime)) == false)
         return false;
     return m_matičniBroj.Equals(a.m_matičniBroj);
 }
 // tipski sigurna (type-safe) implementacija
 public bool Equals(Osoba obj)
 {
     // Implementirati tipski sigurnu usporedbu tako da metoda Main prođe bez problema
     if (this.GetType() != obj.GetType())
         return false;
     Osoba a = (Osoba)obj;
     if ((Osoba.Equals(this.m_ime, a.m_ime)) == false)
         return false;
     return m_matičniBroj.Equals(a.m_matičniBroj);
 }
        public void EqualsZaReferentniTip_UsporedbaDvijuOsobaSRazličitimImenimaRazličitimMatičnimBrojemVraćaFalse()
        {
            Osoba o1 = new Osoba("Janko", 1);
            Osoba o2 = new Osoba("Marko", 2);

            Assert.IsFalse(o1.Equals(o2));
            Assert.IsFalse(o2.Equals(o1));
            Assert.IsFalse(Osoba.Equals(o1, o2));
            Assert.IsFalse(Osoba.ReferenceEquals(o1, o2));
        }
        public void EqualsZaReferentniTip_UsporedbaReferenciNaIstiObjektUvijekVraćaTrue()
        {
            Osoba o1 = new Osoba("Janko", 1);
            Osoba o2 = o1;

            Assert.IsTrue(o1.Equals(o2));
            Assert.IsTrue(o2.Equals(o1));
            Assert.IsTrue(Osoba.Equals(o1, o2));
            Assert.IsTrue(Osoba.ReferenceEquals(o1, o2));
        }
 public static void Jednakost()
 {
     Osoba osobaA = new Osoba("Janko", 1);
     Osoba osobaB = osobaA;
     // TODO: Otkomentirati donju naredbu i provjeriti ispravnost implementacije metode Clone donjim programom
     //osobaB = osobaA.Clone();
     Console.WriteLine(string.Format("{0} ReferenceEquals( {1} ): {2}", osobaA, osobaB, Osoba.ReferenceEquals(osobaA, osobaB)));
     Console.WriteLine(string.Format("{0} == {1}: {2}", osobaA, osobaB, osobaA == osobaB));
     Console.WriteLine(string.Format("{0} != {1}: {2}", osobaA, osobaB, osobaA != osobaB));
 }
        public bool Equals(Osoba obj)
        {
            //  Preslikati implementaciju metode Equals iz EqualsRefTip
            Osoba drugi = (Osoba)obj;
            if (Osoba.Equals(this.m_ime, drugi.m_ime) == false)
                return false;
            return m_matičniBroj.Equals(drugi.m_matičniBroj);

            if (obj == null)
                return false;

            if (this.GetType() != obj.GetType())
                return false;

            return true;
        }
        static void Main(string[] args)
        {
            // dvije osobe
            Osoba osobaA = new Osoba("Janko", 1);
            Osoba osobaB = osobaA;
            Debug.Assert(osobaA.Equals(osobaB));

            osobaB.m_ime = "Marko";
            Debug.Assert(osobaA.Equals(osobaB) == false);

            // kloniramo
            osobaB = osobaA.Clone();
            Debug.Assert(osobaA.Equals(osobaB));

            osobaB.m_ime = "Pero";
            Debug.Assert(osobaA.Equals(osobaB) == false);

            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            // dvije osobe s različitim imenima i MB
            Osoba osobaA = new Osoba("Janko", 1);
            Osoba osobaB = new Osoba("Darko", 2);
            Debug.Assert(osobaA.Equals(osobaB) == false);

            // preslika osobe A
            osobaB = osobaA;
            Debug.Assert(osobaA.Equals(osobaB) == true);

            // novi "Janko" s istim matičnim brojem
            osobaB = new Osoba("Janko", 1);
            Debug.Assert(osobaA.Equals(osobaB) == true);

            // "Janko", ali s drugim matičnim brojem
            osobaB = new Osoba("Janko", 2);
            Debug.Assert(osobaA.Equals(osobaB) == false);

            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            // dvije osobe s različitim imenima i MB
            Osoba osobaA = new Osoba("Janko", 1);
            Osoba osobaB = new Osoba("Darko", 2);
            UsporedbaOsoba(osobaA, osobaB);

            // preslika osobe A
            osobaB = osobaA;
            UsporedbaOsoba(osobaA, osobaB);

            // novi "Janko" s istim matičnim brojem
            osobaB = new Osoba("Janko", 1);
            UsporedbaOsoba(osobaA, osobaB);

            // "Janko", ali s drugim matičnim brojem
            osobaB = new Osoba("Janko", 2);
            UsporedbaOsoba(osobaA, osobaB);

            Console.WriteLine("GOTOVO!!!");
            Console.ReadKey();
        }
        public bool Equals(Osoba obj)
        {
            // TODO: Preslikati implementaciju metode Equals iz EqualsRefTip

            return true;
        }
        // tipski sigurna (type-safe) implementacija
        public bool Equals(Osoba obj)
        {
            // TODO: Implementirati tipski sigurnu usporedbu tako da metoda Main prođe bez problema

            return true;
        }
 static void Jednakost(Osoba osobaA, Osoba osobaB)
 {
     Console.WriteLine(string.Format("{0} == {1}: {2}", osobaA, osobaB, osobaA == osobaB));
     Console.WriteLine(string.Format("{0} != {1}: {2}", osobaA, osobaB, osobaA != osobaB));
 }
 // TODO: Dodati prvom parametru metode modifikator ref tako da se prvi argument osoba metodi prenosi po referenci te promijeniti poziv metode. Pokrenuti program i provjeriti ispis.
 static void PromijeniOsobu(Osoba osoba, string novoIme, int noviMatičniBroj)
 {
     osoba = new Osoba(novoIme, noviMatičniBroj);
 }