zoukankan      html  css  js  c++  java
  • C#中string 和String

    今天突然看到一篇文章关于string和String的,注意一个是string,另一个是String。感觉这个小细节还是很重要的,所以就转了来。

    众所周知string是C#中System.String的别名,一般情况下二者具有相同的含义和功能,那问题时二者是完全相同没有任何区别的吗?如果答案是“是”的话,微软为什么实现了这两个概念而不是仅仅用sting或者String呢,毕竟用一个的话跟简单,给开发人员带来的困惑也更少。

          这个问题纯粹是概念上和理解上的问题,对您的编程技巧没有实质的帮助,如果没有兴趣的话你看到这里就可以为止了;如果您是技术大牛,完全明白这二者的含义,您可以忽略本文也可以帮我指正错误。

          好了,既然您继续向下看,那我也就继续说了哦J.

          为了使本文描述更准确,特地百度一下,下面的分析中很多是参考了搜索结果的内容,甚至是照搬了部分代码,当然我也会在相应的位置上注明引用的URL地址。

         不废话了,直接上代码开始分析(请注意下面代码的颜色,这是我用插入代码的方式自动生成的)。

     string s = “Hello, World.”;
     String S = “Hello, World.”;

    在含义上相当于是using string = System.String,你可以使用typeof(string) == typeof(System.String)来判断;从技术上来讲二者没有什么区别,正如int和Int32一样。很多编程指导原则中推荐这样的一种使用方法:当你使用对象时用string,当作类时用String,例如string s = String.Format(“Hello, {0}.”, “World”),这是微软在示例String.Format方法时的用法;而StyleCop现在强制使用C#规范的别名,也就是说使用StyleCop的话它会强制你使用string而不是String

          类似的C#别名还有:

    C#别名

    BCL全称

    object

    System.Object

    string

    System.String

    bool

    System.Boolean

    byte

    System.Byte

    sbyte

    System.SByte

    short

    System.Int16

    ushort

    System.UInt16

    int

    System.Int32

    uint

    System.UInt32

    long

    System.Int64

    ulong

    System.UInt64

    float

    System.Single

    double

    System.Double

    decimal

    System.Decimal

    char

    System.Char

    和string、object不同,其他的别名都是值类型的,其中decimal是值类型但不是CLR的基础类型(primitive type)。CLR中唯一没有别名的基础类型是System.IntPtr。

    有一种情况是必须使用别名而不能使用CLR全名:

     public enum Foo:Int32{} //编译错误
    
     public enum Bar:int{} //编译正确

    还有一种情况:string是C#保留的关键字,而String是类名(不是保留关键字),也就是说如果你把String用作变量名是不会有编译错误的,而用string作变量名就会有编译错误。

     StringBuilder String = new StringBuilder(); //编译正确
     
     StringBuilder string = new StringBuilder();//编译错误

    当然了,如果你非要用string作变量名的话请在string前加上@,即StringBuilder @string = new StringBuilder()这句话是编译能通过的。

    还有一种情况:在反射中你只能使用String而不能使用string。

    还有一种情况:在未使用using System情况下,你不能使用String而只能使用string。

    最后一种情况:string是C#的保留字,而String是CLR的类型,如果其他厂商实现一种运行时来支持C#的话(恰好有没有支持String),结果就可想而知了。当然了这种情况基本上是不存在的,比彗星撞地球都几率小。

    以上是对string和String区分的一个小总结,如果有遗漏或不正确的地方,欢迎指正。

    转自在C#中string 和String到底有没有区别?

  • 相关阅读:
    idea添加自定义插件仓库 灵狐插件、阿里代码规约插件安装&idea插件推荐
    常用版本名称含义:SNAPSHOT->alpha->beta->release->GA等
    Ambari Centos7离线安装教程详细指导(参考)
    JDK11变化详解&JDK8升级JDK11详细指南
    idea jdk8、jdk9、jdk11、jdk12并自由切换
    idea java EclipseFormatter代码格式化模板
    java基础对象浅复制和深复制(基础知识)
    斐讯路由器L(联)B(壁)K-码兑换包安全下车通道(图文教程)
    SipDroid +miniSIPServer搭建SIP局域网语音通话(一)
    Android Studio 找不到EventBus/ButterKnife等第三方包解决方案
  • 原文地址:https://www.cnblogs.com/wcl2017/p/7047923.html
Copyright © 2011-2022 走看看