浅谈C#中运算符重载的方方面面


1.      什么是运算符重载?

 

将自定义的类型赋予运算符号,使得对象和对象可以进行运算.

 

2.      用到的关键字:  operator

 

例如:

//重载一元运算符原型声明

Public static return-type operator op(type operand)

{

    ……

}

 

//重载二元运算符原型声明

Public static return-type operator op(type operand1,type operand2)

{

    ……

}

 

3.      为什么要重载运算符?

 

这个我要用大白话跟大家解释一下了

打个比方,你知道1+1=2,电脑也知道,这个时候,其中用到的运算符+就不用重载了.但是像这样比较复杂一些的计算式(X+Y)^2 计算机就不会明白了,这时候^就需要重载了,目的就是告诉计算机这个式子的算法是:X*X+2*X*Y+Y*Y。其实就是将计算机不能识别的运算符换成计算机能识别的运算符

 

.

4.      重载运算符包括什么?

 

      

一元运算符

!, ~, ++, ---, true, false

二元运算符

+,-*, /, %, &, |, ^, <<, >>

关系运算符

==, !=, <, >, <=, >=

 

5.      不能被重载的运算符包括?

 

条件运算符

&&, ||

数组运算符

[]

转换运算符

()

赋值运算符

+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=

其他

=, ., ?:, ->, new, is, sizeof, typeof

 

6.      运算符重载的优点有哪些?

 

a)   使得代码更加容易理解和阅读。

b)   可以利用现有运算符的优先级关系规则处理对象之间的运算。

c)   使得代码更加灵活,对象可操作性更好。

d)   开发人员可以举一反三,因为他们熟悉了常规值类型上的运算符使用,这样可以直接将这些规则引入到自定义对象上。

 

7.      C# 中对运算符重载的要求?

 

1.      要求所有的运算符重载时都声明为public和static类型的,表示它们与它们的类或结构相关联,而不是与实例相关联,所以运算符重载的代码不能访问非静态类成员,也不能访问this标识符,

关于this的讲解请大家看考: http://blog.csdn.net/cjr15233661143/article/details/8546946

 

2.        操作符使用起来方便,但是不能够随便重载,,一定要符合语境和一定的业务背景


3.        对于比较运算符==,!=,<,>,<=,>=.重载操作符时一定要成对的重载,比如你重载了==,那么就必须重载!=

 

8.      运算符重载能实现的功能有哪些?

 

  •   支持隐式类型转换和显式类型转换的重载决策。
  •   支持基本一元运算符,如取负、取反、自增、自减等。
  •   支持基本二元运算符,如加、减、乘、除等。
  •   支持基本关系运算符,如大于、小于、等于和不等于等。
  •   实现更加复杂的运算符,如、[]、()、位运算等。

 

9.      了解什么是隐式类型转换,什么是显示类型转换?

 

             (1).      隐式类型转换

 

            所谓隐式转换,就是系统默认的转换,其本质是小存储容量数据类型自动转换为大存储容量数据类型。有如下几种:

 

a)   sbyte类型到short,int,long,float,double,decimal类型。

b)   byte类型到short,ushort,int,uint,long,ulong,float,double,decimal类型。

c)   short类型到int,long,float,double,decimal类型。

d)   ushort类型到int,uint,long,ulong,float,double,decimal类型。

e)   int类型到long,float,double,decimal类型。

f)   uint类型到long,ulong,float,double,decimal类型。

g)   long类型到float,double,decimal类型。

h)   ulong类型到float,double,decimal类型。

i)   char类型到ushort,int,uint,long,ulong,float,double,decimal类型。

j)   float类型到double类型。

 

           (2). 显式类型转换

 

           显式类型转换,即强制类型转换。如果赋值运算的两端不遵循隐式类型转换规则,则需要显式类型转换.


           例如:

           Char a=’1’;

           String b=(string)a;

           Int c=(int)a;

 

   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值