`
javatome
  • 浏览: 843178 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

C#自定义数据类型的元算符重载与类型转换

 
阅读更多

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# 2.0 简介 C# 2.0 是在 C# 1.0 和 1.1 的基础上进行的重大更新,引入了多个重要的新特性,如泛型(Generics)、匿名方法(Anonymous Methods)和迭代器(Iterators)等。...

    微软 C#语言参考 CHM格式

    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 一元操作符重载分析... ...

    明日科技C#开发入门及项目实战

    实例060 使用重载方法实现不同类型数据的计算 实例061 使用属性存储用户编号和姓名 实例062 使用索引器 实例063 通过类继承计算梯形面积 实例064 封装类实现一个简单的计算器 实例065 通过结构计算矩形的面积 实例...

    《C#经典编程220例》.(明日科技).【带书签】-共3部分

    实例060 使用重载方法实现不同类型数据的计算 97 实例061 使用属性存储用户编号和姓名 99 实例062 使用索引器 101 实例063 通过类继承计算梯形面积 103 实例064 封装类实现一个简单的计算器 106 实例065 通过结构...

    C#语言参考(共285页)

    C#语言参考。 目录 1. 介绍..............................................1 1.1 Hello, world............................1 1.2 类型.........................................6.4.4 用户自定义显式类型转换..........

    面试题 C#和.NET

    - **定义**:在.NET框架中,类和结构都是用来封装数据及其操作的自定义类型,但它们之间存在一些关键差异。 - **语法**:结构(`struct`)和类(`class`)在语法上相似,但在一些方面有着根本的不同。 - **值类型 vs...

Global site tag (gtag.js) - Google Analytics