C#运算符重载与索引器

运算符重载主要是让+-*、等等的运算符有我们自定义的功能。这样就可以让我们的代码变得更加简洁而易于理解

期中索引器使用的运算符是[],所以我把自定义索引器也放到一块来讲

首先来看看MSDN为我们列出的可以重载的运算符吧

 

运算符 可重载性

+、-、!、~、++、--、true 和 false

可以重载这些一元运算符。

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

可以重载这些二进制运算符。

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

比较运算符可以重载(但请参见本表后面的说明)。

&&, ||

条件逻辑运算符不能重载,但可使用能够重载的 &| 进行计算。

[]

不能重载数组索引运算符,但可定义索引器。

()

不能重载转换运算符,但可定义新的转换运算符(请参见 explicit 和 implicit)。

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

赋值运算符不能重载,但 += 可使用 + 计算,等等。

=、.、?:、->、new、is、sizeof 和 typeof

不能重载这些运算符。

 

我们挑几个来写一写代码

以下的代码是实现一个复数类的部分功能,以及为了展示一些代码我乱添加的一些无意义的功能

 

关于语法 大致上就是

public static Complex operator +(Complex c1, Complex c2)

注意参数的问题,一目运算符就一个参数,二目运算符就两个参数。正常也是不会犯错的。

 

另外还有一点要特别提一下

比较运算符(如果重载)必须成对重载;也就是说,如果重载 == ,也必须重载 != 。反之亦然,<> 以及 <=>= 同样如此。

如果像上面的代码一样重载了==而没有重载Equals()会丢出一个警告。

 

如果重载了一目++ --这类运算符。出现的那种a++;++a;a++ + ++a;这类的问题和基本类型的情况是一样的。通常也不喜欢写这种骗人的代码。

 

+=,-=,*=,这一类的会因为+ - *被重载而有新的意义。

 

下面是一些索引器的东西

关于索引器,我用很烂的方式构造了一个复述集合来使用索引器。

索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。

语法如下

    public
 类型 this
 [int
 i]
{
get { }
set { }
}

添加索引器后,就可以像数组一样使用下标([]运算符)来访问了。通常对GET 和 SET 模块的设计,能让索引器的功能变得十分强大。

 

相关文章地址:

http://msdn.microsoft.com/zh-cn/library/8edha89s(VS.80).aspx
http://msdn.microsoft.com/zh-cn/library/6x16t2tx(v=vs.80).aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值