zoukankan      html  css  js  c++  java
  • 6.1. String

    public sealed class String:IComparable,ICloneable,IConvertible,IComparable,IEnumerable,IEquatable

    这个类才是重点,而且和 System.Text.StringBuilder,StringBuilderCache关系紧密
    

    构造函数

    全部都是extern定义的
    public extern String(char[] value);
    unsafe public extern String(sbyte* value);
    所以我不知道它的内部是不是char[]
    

    this[int index]

    连这个也是extern,所以我不知道它的内部是不是char[],看看clr via c#吧
    

    System.Text.StringBuilder:ISerializable

    主要作用是利用内部的char[],来避免频繁的创建string实例
    
    内部使用两个char[] ,
        1.char [] m_ChunkChars 
        2. StringBuilder m_ChunkPrevious // 也算不上数组,不过是对自己的引用
    ToString() 就是将两者合并之后的值
    内部扩展capacity的方法是 ExpandByABlock
    

    属性

    public int Length{get;set;}
    public int Capacity{get;set;}
    public int MaxCapacity{get;}
    public char this[int]{get;set;}
    

    方法

    Append()
    AppendFrom()
    AppendLine()
    Clear()
    CopyTo(int,char[],int,int)
    EnsureCapacity(int)
    Insert(int,***)
    Replace()
    ToString()
    

    分析

    int m_ChunkLength  //实际的length
    int m_ChunkOffset  //m_chunkPrevious 的长度
    char[] m_ChunkChars 
    StringBuilder m_ChunkPrevious //保存的前一个块
    int m_MaxCapacity   //默认Int32.MaxValue,也可以指定
    int DefaultCapacity=16;
    m_ChunkLength=0;
    m_ChunkOffset=0;
    
    
    1. StringBuilder(string value,int startIndex,int length,int capacity);
        默认的m_ChunkChars 的内容长度是16,大于则是length
    
    2. Append(string)
        一般的基元类型都转成string后调用该方法
        在长度
    3. ExpandByABlock(int)
        int newBlockLength = Math.Max(minBlockCharCount,Math.Min(Length,MaxChunkSize));
        1. Math.Min(Length,MaxChunkSize) = Math.Min(Length,8000)
        2. Math.Max(minBlockCharCount,value1)
            minBlockCharCount
    

    System.Text.StringBuilderCache

    能够在单线程中显示缓存多个stringbuilder实例
    const int MAX_BUILDER_SIZE = 360;
    
    1. Acquire
        
    
    2. Release
    
    3. GetStringAndRelease
    这就是
  • 相关阅读:
    Go语言基础练习题系列2
    Go语言基础练习题系列1
    Go语言基础之8--面向对象编程1之结构体(struct)
    Go语言基础之7--函数详解
    分数规划(Bzoj1486: [HNOI2009]最小圈)
    [APIO2018] Circle selection 选圆圈(假题解)
    Bzoj4520: [Cqoi2016]K远点对
    KDTree(Bzoj2648: SJY摆棋子)
    矩阵树定理
    CF235C Cyclical Quest
  • 原文地址:https://www.cnblogs.com/zhangrCsharp/p/7695582.html
Copyright © 2011-2022 走看看