CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

如何实现 byte[] 运算符+ 重载,就像string 一样?

楼主applelppa(人生若只如初见)2005-04-18 09:22:32 在 .NET技术 / C# 提问

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

相关问题

  • 重载运算符
  • 有关string中输出运算符<<重载的问题。
  • String的+是不是像c++一样重载运算符?
  • 求string类的重载小于运算符<的实现代码
  • 怎样重载(),[],=运算符
  • 如何重载+运算符?
  • 关于运算符重载。。
  • 关于运算符重载
  • 如何重载运算符<<
  • 能否重载()运算符?

关键词

  • annebytes
  • 重载
  • 运算符
  • retval
  • 操作符
  • copyto
  • byte
  • 参数
  • 类型
  • 二元

得分解答快速导航

  • 帖主:applelppa
  • jxzhang615
  • sun926
  • qpl007

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo