c#中操作符重载:
代码如下 | 复制代码 |
class Test |
虽然CLR对操作符一无所知,但它却规范了编程语言应该怎样提供操作符重载,以使它们可以很容易地被不同的编程语言编写的代码所使用,每个编程语言自己决定是否支持操作符重载,以及如果提供,表达和使用它们的语法是怎样的,对于CLR来讲,操作符重载仅仅是一些方法而已。
当编辑如果代码时,编辑器会产生一个名为op_Addition的方法定义;该方法定义条目上有一个specialname标记,表示这是一个"特殊"的方法。当编辑器(包括C#编辑器)看到源代码中的+操作符时,它们会去看其中的操作数类型中有哪一个定义了参数类型和操作数类型兼容、名为op_Addition的specialname方法。如果存在这样的方法,编译器就会调用方法,如果不存在,则会出现编译错误。
操作符与语言互操作性:
操作符重载是一个很有用的工具,它能够通过简洁的语法来表达自己的思想。但不是很一种编程语言都支持操作符的重载,比如Visual Basic ,所以当Visual Basic开发人员在一相非基元类型(Visual Basic认为的)上应用+操作符时,编译器将产生一个错误,并停止运行。这样就产生了一个问题,一个使用不支持操作符重载语言的开发人员怎么去调用另一个支持操作符重载的语言定义类型呢?
以Visual Basic 与 C# 为例(Visual Basic 不支持操作符的重载,而c#支持):
1.在Visual Basic 里没有操作符的重载,但是提供了一个op_Addition(相当于+)方法;
首先建一个vb的类库并新建一个VbType的类,类的内容如下:
代码如下 | 复制代码 |
Public Class VbType Public Shared Function op_Addition(ByVal a As VbType, ByVal b As VbType) As String End Class |
2.在 c#里对上面类型的实例进行+操作
代码如下 | 复制代码 |
using System; class Program //只能通过这样的方法来访问 |
之所以不能用+ 来操作两个实例的原因是:当c #编译器遇到+时,就会到元数据中去查找带有specialname的元数据标记的op_Addition方法,编译器才能确定这是一个操作符重载的方法,但是vb产生的op_Addition方法没有specialname标记,所以编译器会报错。
相反,如果是在c#中定义了一个+操作符的重载,在vb里面进行实例的+操作的话,也只能调用op_Addition方法
敢达决战官方正版 安卓版v6.7.9
下载敢达决战 安卓版v6.7.9
下载像素火影骨架佐助 (Perseverance Fire Shadow)手机版v1.16
下载要塞英雄 安卓版v33.20.0-39082670-Android
下载梦想城镇vivo最新版本 安卓版v12.0.1
梦想城镇vivo版是这款卡通风模拟经营类手游的渠道服版本,玩
怦然心动的瞬间 安卓版v1.0
怦然心动的瞬间是一款真人向的恋爱互动游戏,在游戏中玩家将扮演
曼尼汉堡店游戏 安卓版v1.0.3
曼尼汉堡店是一款非常好玩的精品恐怖类型冒险游戏,在这款游戏中
现代总统模拟器去广告版 安卓版v1.0.46
现代总统模拟器是一款休闲养成类游戏,可能对于不少的玩家来说都
现代总统模拟器付费完整版 安卓版v1.0.46
现代总统模拟器高级版在商店是需要付费的,相对于普通版本,高级