using System;
using System.Collections;
namespace MyPractise.CastType
{
class Program
{
static void Main(string [] args)
{
string str = (string )new Person ("John" );
Console .WriteLine(str);//Output John
Person person = str;
Console .WriteLine(person.Name);//Output John
Person person2 = new Person ("Jone" );
Console .WriteLine(person == person2);//Output false
person2 = (Person )str;
Console .WriteLine(person == person2);//Output true
Console .WriteLine(Type .ReferenceEquals(person,person2));//Output false
Console .ReadKey();
}
}
class Person
{
public string Name { get ; set ; }
public Person(string name)
{
Name = name;
}
/// <summary>
/// Overload ==
/// </summary>
/// <param name="left"></param>
/// <param name="right"></param>
/// <returns></returns>
public static bool operator == (Person left,Person right)
{
return left.Name==right.Name;
}
/// <summary>
/// Overload !=
/// </summary>
/// <param name="left"></param>
/// <param name="right"></param>
/// <returns></returns>
public static bool operator !=(Person left, Person right)
{
return left.Name != right.Name;
}
/// <summary>
/// Override Equals
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public override bool Equals(object obj)
{
Person equalInstancePerson = (Person )obj;
return this == equalInstancePerson;
}
/// <summary>
/// Override GetHashCode
/// </summary>
/// <returns></returns>
public override int GetHashCode()
{
return base .GetHashCode();
}
/// <summary>
/// Overload Person->string
/// </summary>
/// <param name="person"></param>
/// <returns></returns>
public static explicit operator string (Person person)
{
return person.Name;
}
/// <summary>
/// Overload string->Person
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static implicit operator Person (string str)
{
return new Person (str);
}
}
}