如何实现 byte[] 运算符+ 重载,就像string 一样?
string 的+很常用,如何在byte[] 里实现呢?
Sample:
byte [] b1 = {0x11,0x22};
byte [] b2 = {0x33,0x44};
byte[] b3 = b1 + b2; // b3 = {0x11,0x22,0x33,0x44};
---------------------
得到上面那样的结果
问题点数:100、回复次数:7Top
1 楼jxzhang615(冰河)回复于 2005-04-18 09:27:59 得分 10
帮顶!Top
2 楼applelppa(人生若只如初见)回复于 2005-04-18 09:44:51 得分 0
public static byte[] operator+ (byte[] b1, byte[] b2)
{
byte[] retVal = new byte [b1.Length + b2.Length];
b1.CopyTo (retVal, 0);
b2.CopyTo (retVal, b1.Length - 1);
return retVal;
}
-------------------------------------
编译错误: 二元运算符的参数之一必须是包含类型
Why? Thanks!
Top
3 楼applelppa(人生若只如初见)回复于 2005-04-18 09:46:01 得分 0
Post again
------------------------------------
public static byte[] operator+ (byte[] b1, byte[] b2)
{
byte[] retVal = new byte [b1.Length + b2.Length];
b1.CopyTo (retVal, 0);
b2.CopyTo (retVal, b1.Length);
return retVal;
}
-------------------------------------
编译错误: 二元运算符的参数之一必须是包含类型
Why?
Thanks!
Top
4 楼sun926(初学者)回复于 2005-04-18 09:52:35 得分 50
如果被重载的操作符是二元操作符,那么第一个参数的类型必须与包含此方法的类的类型相同,而第二个参数可以是任意类型。
所以因为byte[]属于CLR类型,所以不能作为重载的第一个参数,这样做是为了防止修改CLR的默认运算逻辑,比如1+2=4这种情况的发生。
另:可以自己写一个包装了byte[]的类来重载+。Top
5 楼applelppa(人生若只如初见)回复于 2005-04-18 10:21:20 得分 0
public struct AnneBytes
{
public byte[] bytes;
public AnneBytes (byte[] byteInput)
{
this.bytes = byteInput;
}
public static AnneBytes operator + (AnneBytes b1, AnneBytes b2)
{
AnneBytes retVal;
retVal.bytes = new byte [b1.bytes.Length + b2.bytes.Length];
b1.bytes.CopyTo (retVal.bytes, 0);
b2.bytes.CopyTo (retVal.bytes, b1.bytes.Length);
return retVal;
}
}
---------------------------------------------------
byte [] b1 = {};
byte [] b2 = {0x39,0x45};
AnneBytes a1 = new AnneBytes (b1);
AnneBytes a2 = new AnneBytes (b2);
AnneBytes a3 = a1 + a2;
-----------------------------------------------------
这样调用起来很麻烦,真的不能写成byte[] b3 = b1 + b2; ?
Thanks!
Top
6 楼qpl007(蓝色闪电)回复于 2005-04-18 10:45:06 得分 40
不能!
系统类型无法重载也不能允许重载其操作符~
就像你无法重载 int 的操作符来实现 1+1 = 100 这样的运算!Top
7 楼applelppa(人生若只如初见)回复于 2005-04-18 12:03:55 得分 0
I see.
--------------------------------
顶者有分!
---------------------------------------------------------------------------
四十年来家国,三千里地山河,凤阁龙楼连霄汉,玉树琼枝作烟箩。几曾识干戈?
---------------------------------------------------------------------------
男儿生世间,及壮当封侯。战伐有功业,焉能守旧丘。
Top




