C#学习 —— 比较、运算符重载

本文详细介绍了C#中的类型判断与值比较方法,包括使用GetType(), typeof(), is运算符进行类型检查,以及通过+、-、>、<等运算符和IComparable, IComparer接口进行值比较。同时,深入解析了as运算符的类型转换功能和运算符重载的实现。

类型比较

在比较对象时,常常需要了解它们的类型,才可以确定是否可以进行值的比较。所有的类都继承自System.Object,将GetType()方法和typeof()运算符一起使用,可以确定对象的数据类型:

if(myObj.GetType()==typeof(MyComplexClass))
{
//处理内容
}

is 运算符
is运算符不是用来说明对象时某种类型,而是用来检查对象是不是给定类型,或者是否是可以转换为给定的类型,如果是就放回true,is运算符的语法如下:

<operand> is <type>
  • 如果< type >是一个类型,而< operand>也是该类型,或者它继承了该类型 ,或者它可以封箱到该类型中,则结果为true
  • 如果< type>是一个接口类型,而< operand>也是该类型,或者它是实现该接口的类型,则结果为true
  • 如果< type>是一个值类型,而< operand>也是该类型,或者它可以拆箱到该类型中,则结果为true

值比较

可以使用运算符+、-、>、>=、<、<=、=等运算符进行值得比较,也可以使用运算符重载比较。还有一种方式是使用IComparable和IComparer接口,它们可以采用标准的方式定义比较对象的过程。

  • IComparable:在比较的对象类中实现,可以比较该对象和另一个对象,该接口提供了一个方法CompareTo(),改方法接受一个对象,返回一个int。A.CompareTo(B)
  • IComparer:在单独的类中实现,可以比较任意两个对象,该接口提供方法Compare(),这个方法接受两个对象,返回一个整型结果.

as运算符
as运算符,把一种类型转换为指定的引用类型:

< operand> as <type>

这只适用于下列情况:

  • < operand>的类型是< type>类型
  • < operand>可以隐式的转换为< type>类型
  • < operand>可以封箱到< type>类型中

如果不能从< operand>转换< type>,则表达式的结构就为null

运算符重载

运算符重载看起来与标准静态方法声明类似,但是它们使用关键字:operator和运算符本身 ,例如:

    public class UserInfo
    {
    	public int Star=0;
        public static UserInfo operator +(UserInfo a, UserInfo b)
    	{
        	UserInfo info = new UserInfo();
        	info.Star = a.Star + b.Star;
        	return info;
    	}
    	public static UserInfo operator -UserInfo a,UserInfo b)
    	{
    		UserInfo info = new UserInfo();
        	info.Star = a.Star - b.Star;
        	return info;
    	}
    }

  • 可以重载的运算符:

    • 一元运算符:+,-,!,~,++,–,true,false
    • 二元运算符:+,-,*,/,%,&,|,^,<<,>>
    • 比较运算符:==,!=,<,>,>=,<=
	public class UserInfo
    {
    	public int Star=0;
        public static bool operator >=(UserInfo a, UserInfo b)
    	{
        	return a.Star>=b.Star;
    	}
    	public static bool operator !=UserInfo a,UserInfo b)
    	{
        	return a.Star!=b.Star;
    	}
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值