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);
}
}
}
分享到:
相关推荐
### C# 2.0 重点与难点解析 #### 一、C# 2.0 简介 C# 2.0 是在 C# 1.0 和 1.1 的基础上进行的重大更新,引入了多个重要的新特性,如泛型(Generics)、匿名方法(Anonymous Methods)和迭代器(Iterators)等。...
6.4.4 用户自定义显式类型转换... 89 7. 表达式... 91 7.1 表达式分类... 91 7.1.1 表达式的数值... 92 7.2 操作符... 92 7.2.1 操作符优先级和结合顺序... 92 7.2.2 操作符重载... 93 7.2.3 一元操作符重载分析... ...
实例060 使用重载方法实现不同类型数据的计算 实例061 使用属性存储用户编号和姓名 实例062 使用索引器 实例063 通过类继承计算梯形面积 实例064 封装类实现一个简单的计算器 实例065 通过结构计算矩形的面积 实例...
实例060 使用重载方法实现不同类型数据的计算 97 实例061 使用属性存储用户编号和姓名 99 实例062 使用索引器 101 实例063 通过类继承计算梯形面积 103 实例064 封装类实现一个简单的计算器 106 实例065 通过结构...
C#语言参考。 目录 1. 介绍..............................................1 1.1 Hello, world............................1 1.2 类型.........................................6.4.4 用户自定义显式类型转换..........
- **定义**:在.NET框架中,类和结构都是用来封装数据及其操作的自定义类型,但它们之间存在一些关键差异。 - **语法**:结构(`struct`)和类(`class`)在语法上相似,但在一些方面有着根本的不同。 - **值类型 vs...