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

本文介绍了一个C#示例程序,该程序演示了如何使用类型转换和运算符重载来处理Person对象与字符串之间的转换。通过定义Person类并实现相应的显式和隐式转换运算符,使得Person对象可以被直接转换为字符串,反之亦然。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);

        }

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值