我是靠谱客的博主 甜美长颈鹿,最近开发中收集的这篇文章主要介绍关于string,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  最近看到好几篇,关于string的文章,有的说的不错,有的则说的有点问题,所以,干脆也来谈谈string的问题。

  1、string是引用类型,这个事实的证明方法有很多,例如:

Console.WriteLine( typeof ( string ).IsValueType); //  false
string  s  =   " some string " ;
Console.WriteLine(
object .ReferenceEquals(s, s)); //  true, no boxing
Console.WriteLine( object .ReferenceEquals( 1 1 )); //  false, boxing


  2、string是不可改变的。关于这一点,我持反对意见,string绝对是可以改变的,只不过,一般情况下不需要去改变string本身,就可以达到目的,例如使用string.Concat方法(也就是“+”的真正实现)

  方法1 - unsafe代码:

string  s  =   " some string " ;
unsafe
{
    
fixed  ( char *  ptr  =  s)
    {
        
* ptr  =   ' S ' ;
    }
}
Console.WriteLine(s);


  方法2 - 反射(调用那些本来应该由StringBuilder来调用的方法):

string  s  =   " some string " ;
typeof ( string ).GetMethod( " SetChar " , BindingFlags.Instance  |  BindingFlags.NonPublic).Invoke(s,  new   object [] {  0 ' S '  });
Console.WriteLine(s);


  3、string的安全性。为了保证敏感信息的安全,请尽量使用System.Security.SecureString,当然,如果你喜欢玩弄string的话,也不是完全没有办法,只需要稍微动点手脚,就可以让真实的string(“你好”)仅仅在需要的那一刻出现,平时则伪装成“企夜”,来欺骗那些试图直接读取内存的程序:

string  s  =   " 企夜 " ;
unsafe   //  decode
{
    
fixed  ( char *  ptr  =  s)
        
for  ( int  i  =   0 ; i  <  s.Length; i ++ )
            
* (ptr  +  i)  ^=   ' a ' ;
}
Console.WriteLine(s);
unsafe   //  re-encode
{
    
fixed  ( char *  ptr  =  s)
        
for  ( int  i  =   0 ; i  <  s.Length; i ++ )
            
* (ptr  +  i)  ^=   ' a ' ;
}
Console.WriteLine(s);


其实还可以写的更诡异:

unsafe   //  decode
{
    
fixed  ( char *  ptr  =   " 企夜 " )
        
for  ( int  i  =   0 ; i  <   " 企夜 " .Length; i ++ )
            
* (ptr  +  i)  ^=   ' a ' ;
}
Console.WriteLine(
" 企夜 " );
unsafe   //  re-encode
{
    
fixed  ( char *  ptr  =   " 企夜 " )
        
for  ( int  i  =   0 ; i  <   " 企夜 " .Length; i ++ )
            
* (ptr  +  i)  ^=   ' a ' ;
}
Console.WriteLine(
" 企夜 " );


  如果把两段unsafe代码封装成方法,那么在别人看来仅仅是在输出前调用了一些看上去不相关的方法,没有传递任何的参数,但是,就是这样却也可以修改特定的string的值。

转载于:https://www.cnblogs.com/vwxyzh/archive/2009/06/29/1513517.html

最后

以上就是甜美长颈鹿为你收集整理的关于string的全部内容,希望文章能够帮你解决关于string所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部