zoukankan      html  css  js  c++  java
  • .NET面试基础知识之String(一)

    String

    String 是不可变的(immutable), 一旦建立,不能改变。

    字符串池

    CLR初始化时会创建一个内部的HASH TABLE,key是字符串,value是对托管堆上的字符串对象的引用。但是当显式的New一个字符串对象时,字符串池不起作用。

    System.Runtime.CompilerServices.CompilationRelaxationAttribute特性来开关字符串池

    ComplitationRelaxations.NoStringInterning

    SecureString

    命名空间System.Security

    SecureString的由来

    SecureString是用来保存机密的字符串。传统字符串以明码的形式分配在内存上,一个简单的内存读写工具就可以轻易捕获这些字符串。 对这些字符串加密时他们已经在内存很久了,解决这个问题的方法为在字符串的获得过程中直接进行加密。即SecureString.

    SecureString的分配不同于传统字符串,它被分配在非托管内存上,一开始就以加密的形式存在。对它的所有操作都是逐字符进行的。在这些操作时,字符会被解密,然后再操作,最后加密。有一小段时间,字符是以明码的形式存在的。

    SecureString实现了Dispose/Finalize模式。释放石对象内存全部置0

    代码示例

    using(SecureString ss=new SecureString())

    {

      ss.AppendChar('a');

      ss.AppendChar('b');

      ss.AppendChar('c');

      ss.InsertAt(1,'c');

      PrintSecureString(ss);

    }

    private unsafe static void PrintSecureString(SecureString str)

    {

      char* buffer=null;

      try

      {

        buffer=(char*)Marshal.SecureStringToBSTR(str);

        for(int i=0;*(buffer+i)!='';i++)

          Console.Write(*(buffer+i));

        Console.Write(" ");

      }

      finally

      {

        if(buffer!=null)

          Marshal.ZeroFreeBSTR((System.IntPtr)buffer);

      }

    }

  • 相关阅读:
    首页列表显示全部问答,完成问答详情页布局。
    制作首页的显示列表。
    管理信息系统 课程设计
    期末作品检查
    数据迁移
    模型分离(选做)
    密码保护
    实现搜索功能
    完成个人中心—导航标签
    个人中心标签页导航
  • 原文地址:https://www.cnblogs.com/sift/p/3594900.html
Copyright © 2011-2022 走看看