今天想自己定义一个业务专用的字符串类,结果发现居然没法重载string,超级郁闷,好好的一个类干吗给封了,定制某个业务专用的字符串类应该是非常平常的一件事吧.........除了设一个string 的字段还有没有什么更好的方法?有明白的来帮个忙。

解决方案 »

  1.   

    楼主基础知识要补一补了
    重载string? 重载的意思是一个同名函数可以参数不同而衍生出不同的版本~
      

  2.   

    基元类型,只接用了,不用重载。
    string.Method(...)
      

  3.   

    现在的方法是自己做一个对string的隐式转换,然后写一堆类似于这样的东西:public int Length
    {
        get{return str.Length;}
    }不知道还有没有什么好的办法。
      

  4.   

    应该是继承,是想说重载string的函数.......
      

  5.   

    String是一个特殊的类,系统本身对其进行了很多优化
    如果可以继承会破坏CLR对String所做的假设
      

  6.   

    写一个静态类,传入string参数即可
      

  7.   

    当然是seal了,不然这种基础类整出n个版本来,那还不出大乱子啊使用聚合,wrapper一下好了
      

  8.   

    基元类型,只接用了,不用重载。
    string.Method(...)
    --------------------------------
    举个例子,一个表示16进制数的字符串类似于"FE0187A2",那么它的Length从用户的角度来说,应该是str.Length/2吧,这只是简单的情况,复杂的呢?直接用只怕不太舒服吧........
      

  9.   

    当然是seal了,不然这种基础类整出n个版本来,那还不出大乱子啊使用聚合,wrapper一下好了
    ---------------------------
    谢谢,我现在就是用的这个方法,不过感觉基础类衍生出多个版本也没什么,反正是自己用,也有一些语言的string不是seal的,估计是ms在里面做了些转换或者优化的东西怕实现多态的时候容易出问题......
      

  10.   

    .net 3.0/3.5 可以使用扩展方法向string类额外添加方法
      

  11.   

    业务专用的字符串类
    啥叫业务专用的字符串类?字符串类只表示文字,没有其他含义。"FE0187A2",那么它的Length从用户的角度来说,应该是str.Length/2吧
    这个我就无语了,如果string的Length被重写还有谁敢用?
      

  12.   

    业务专用的字符串类
    啥叫业务专用的字符串类?字符串类只表示文字,没有其他含义。"FE0187A2",那么它的Length从用户的角度来说,应该是str.Length/2吧
    这个我就无语了,如果string的Length被重写还有谁敢用?
    -----------------------
    又不是在string类里重写,是在派生类里重写,其他人该怎么用不还是怎么用?你的类库只是给你的客户使用的,或者你提交类库给客户都没说明书的?string的确只表示字符串,没其他意义,但不代表它所派生的所有类都没有其他含义,中国字光排序的方法恐怕都不少于10种,难道ms能都给你列出来?开发公司给你类库是让你在这个基础上创造自己的东西,而不是光让你使用.......
    "FE0187A2",那么它的Length从用户的角度来说,应该是str.Length/2,这个有什么不可以?就算你想让所有人都用,那也只要自己加个自定义属性类就一切搞定。
    string 之所以被封有可能是因为它特殊的地方,比如str1=str2;然后更改str1时出现的初始化现象,如果没有特殊原因,string是不应该被封的。
      

  13.   

    用C#3的扩展方法呀
    ---------------------
    这个倒是没试验过,framework 3.0了解的不太多。
      

  14.   

    好多SYSTEM的类都是seal,不能继承.
      

  15.   

    继承的意义就在于重写,所有用到父类的地方,用子类也要同样可以。如果你把Length改成了Length/2,那.Net所有的程序不崩溃才怪。
    另外对于String这样特殊的类.Net已经在Object里加了ToString()方法了,你自己定义一个类然后重写ToString()方法不是更好吗?
      

  16.   

    继承的意义就在于重写,所有用到父类的地方,用子类也要同样可以。如果你把Length改成了Length/2,那.Net所有的程序不崩溃才怪。
    --------------------
    我用一个class HexString:String,重载他的Length函数,你来告诉我其他根本不知道HexString类的人的程序是怎么崩溃的,继承后只有子类的实例才能用子类的函数的,父类的实例根本用不了-_-! 这个是多态的基本规则。
      

  17.   

    如果按照你的想法,String str = new HexString("FE0187A2");
    你想要str.Length的结果是什么?
      

  18.   

    如果按照你的想法,String str = new HexString("FE0187A2");
    你想要str.Length的结果是什么?
    ----------------------
    如果一个人连HexString是什么都不知道,那这么写就没办法了,就像如果一个人根本不知道string 是什么东西,那么它让object o=new String(); 然后调用o.ToString();他的本意还可能是想看看类型呢.....另外,我前面也写了,如果你想给你的客户用,那么就要明确的给出说明,就算你想让所有人都用,还怕混淆,那也只要自己加个自定义属性类就一切搞定,请注意阅读。
      

  19.   

    很简单的问题,HexString是不是String?
    是的话,String str = new HexString("FE0187A2");str.Length的结果是什么?想要让锤子继承剪刀的想法是不可取的。
      

  20.   

    很简单的问题,HexString是不是String?
    是的话,String str = new HexString("FE0187A2");str.Length的结果是什么?想要让锤子继承剪刀的想法是不可取的。
    ---------------------------------------
    HexString的确是String,但谁规定的Length就一定是字符个数?
    按你这说法大家都不要重载了,否则都会混淆。
      

  21.   

    String是一个基础类,你如果要写一个HexString的类,就要包装一下,将String里面的函数全部重新定义,重写一遍。
      

  22.   

    只要有人认同String.Length不一定是字符个数的想法,那我就承认lz是对的,是MS错了……
      

  23.   

    只要有人认同String.Length不一定是字符个数的想法,那我就承认lz是对的,是MS错了……
    ------------------
    别偷换概念,String是ms做的,他说了算,我可没说它错,他感觉不好可以把Length不让重载,但把整个类封掉让人功能都没法添加显然不是好方法。
      

  24.   

    String是一个基础类,你如果要写一个HexString的类,就要包装一下,将String里面的函数全部重新定义,重写一遍。
    ----------------------------
    没错,烦的就是这点,就算你只添加一个功能,也要重新定义全部函数和属性