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;