1,变量的分类:

C#是一种类型安全的语言。每一个变量都要求定义为一个特定的类型,并且要求存储在变量中的值只能是这种类型的值。

值类型

在C#中你可以通过声明枚举类型或是结构类型来定义你自己的值类型。C#以同样的方式处理用户自定义的类型和C#预定义的值类型,不过C#编译器可能更优于处理后者。下面的表列出了C#中预定义的值类型的一些信息。因为在C#中所有的基本值类型都是从object类型(最终基类)发展而来,所以下表中还显示了与这些预定义类型相对应的.Net框架中的System类型。

C# 类型

.Net 框架类型

有无符号

占据位数

取值范围

sbyte

System.Sbyte

1

-128 到 127

short

System.Int16

2

-32768 到32767

int

System.Int32

4

-2147483648 到 2147483647

long

System.Int64

8

-9223372036854775808 到 9223372036854775807

byte

System.Byte

1

0 到 255

ushort

System.Uint16

2

0 到 65535

uint

System.UInt32

4

0 到 4294967295

ulong

System.Uint64

8

0 到18446744073709551615

float

System.Single

4

可能值从 ±1.5 x 10-45 到 ±3.4 x 1038,小数点后7位有效数字

double

System.Double

8

可能值从 ±5.0 x 10-324 to ±1.7 x 10308 小数点后15到16位有效数字

decimal

System.Decimal

12

可能值从 ±1.0 x 10-28  到±7.9 x 1028小数点后28到29位有效数字

char

System.Char

N/A

2

任何16位Unicode字符

bool

System.Boolean

N/A

1 / 2

true 或者false

在下面的代码中,两个变量都声明为整形,并得到赋值:

int x = 10;
int y = x;
y = 20; // 这条语句运行后x的值为10,y的值为20;

引用类型

C#预定义的引用类型包括object和string类型。正如我们在上面提到的,object类型是所有其他类型的最终基类。用户定义的引用类型可以是接口类型、类类型和委托类型(第12课会有具体介绍)。

引用类型事实上保存一个指向它引用的对象的内存地址。下面的代码段中有两个变量引用了同一个对象(本例中,假设这个对象有一个数据成员’myValue’):

object x = new object();
x.myValue = 10;
object y = x;
y.myValue = 20; // 这条语句执行后,x.myValue和y.myValue的值都为20。

上面的这段代码演示了引用类型的一个特点:改变某一个引用指向的对象的属性同时也会影响到所有其他指向这个对象的引用。不过,strings类型虽然也是引用类型,但它的工作方式更象值类型。当一个字符串被指定了另一个字符串的值时,例如:

string s1 = "hello";
string s2 = s1;

s2和s1都引用了同一个字符串类型,但是当s1的值发生改变时,例如s1=”goodbye”;s2的值仍然是”hello”。之所以会这样,是因为当改变s1的值是,新创建了一个string对象,s1引用这个新的string对象;s2仍然引用原来string对象。产生这种行为的原因是string对象是恒定的,也就是说,一旦一个string对象被创建,它的值就不能再修改,所以当改变一个字符串变量的值的时候,仅仅是新创建了一个包含修改内容的新的string对象。

2,变量的作用域

  按我的理解,变量的作用域简单点说就是变量能使用的范围。它可分为局部变量,和全局变量。

局部变量:

  局部变量可理解为在同一个大括号内的变量,如:

static void Main(string [] args)

{

  int mynumber=0;

  Console.Write(Convert.ToString(mynumber));

}

其中mynumber就为局部变量,当在Main方法外使用时就会出现错误。

局部变量在使用之前必须初始化。

全局变量:

static int mynumber;

static void Main(string [] args)

{

  Console.Write(Convert.ToString(mynumber));

}

其中mynumber就为全局变量,可在包含该变量大括号内的所有区域使用,可不初始化,系统默认赋值,上面例子中的mynumber值为0;

当有全局变量与局部变量重名的时候,全局变量会被屏蔽。如下面所示。

static int mynumber=0;

static void Main(string [] args)

{

  int mynumber=5;

  Console.Write(Convert.ToString(mynumber));//程序将输出数据为5

Console.Write(Convert.ToString(Program.mynumber));//程序将输出数据为0

}

分析下面代码可以明白变量的作用域问题。

代码一:

string text;
for (int i = 0; i < 10; i++)
{
text = "Line" + Convert.ToString(i);
Console.WriteLine("{0}",text);
}
Console.WriteLine("The Last text:{0}",text);
Console.ReadKey();

其中代码一将会报使用了未赋值的局部变量,对于刚入门的人来说很容易混淆,明明在for循环中赋值了,为什么说未赋值呢?

原因在于,声明一个简单类型的变量,并不会引起其他变化,只有赋值后,才会占用一块存储空间。如果赋值在循环或其他独立块中发生,则该值实际被定义为局部值。

也就是说,该变量本身没有被局部化,但是该值已经被局部化了。需在声明该变量时就对其赋值。

string text=“”;
for (int i = 0; i < 10; i++) 
{
text = "Line" + Convert.ToString(i);
Console.WriteLine("{0}",text);
}
Console.WriteLine("The Last text:{0}",text);
Console.ReadKey();

C#变量详解的更多相关文章

  1. mysql show variables系统变量详解

    mysql系统变量详解 mysqld服务器维护两种变量.全局变量影响服务器的全局操作.会话变量影响具体客户端连接相关操作. 服务器启动时,将所有全局变量初始化为默认值.可以在选项文件或命令行中指定的选 ...

  2. net core体系-web应用程序-4net core2.0大白话带你入门-5asp.net core环境变量详解

    asp.net core环境变量详解   环境变量详解 Windows操作系统的环境变量在哪设置应该都知道了. Linux(centos版本)的环境变量在/etc/profile里面进行设置.用户级的 ...

  3. Maya 常用环境变量详解

    Maya 常用环境变量详解 前言: Maya 的环境变量让用户可以很方便的自定义 Maya 的功能. 在 Maya 的 Help 帮助文档中有专门的一个章节< Environment Varia ...

  4. Shell学习之Bash变量详解(二)

    Shell学习之Bash变量详解 目录 Bash变量 Bash变量注意点 用户自定义变量 环境变量 位置参数变量 预定义变量 Bash变量 用户自定义变量:在Bash中由用户定义的变量. 环境变量:这 ...

  5. asp.net core环境变量详解

    环境变量详解 Windows操作系统的环境变量在哪设置应该都知道了. Linux(centos版本)的环境变量在/etc/profile里面进行设置.用户级的环境变量在其它文件里面,不多说了,有兴趣的 ...

  6. 4、Ubuntu系统环境变量详解

    参考:Linux公社Ubuntu系统环境变量详解 UNIX/Linux系统中的环境变量和库文件的使用方法 由于Linux系统严格的权限管理,造成Ubuntu系统有多个环境变量配置文件,因此我们需要了解 ...

  7. Nginx基础篇(2)- Nginx基本配置文件和变量详解

    Nginx基本配置文件和变量详解 1. 基本配置文件 /etc/nginx/nginx.conf # nginx运行的用户 user nginx; # nginx进程数,建议设置为等于CPU总核心数. ...

  8. 如何查找YUM安装的JAVA_HOME环境变量详解

    如何查找YUM安装的JAVA_HOME环境变量详解  更新时间:2017年10月27日 09:44:56   作者:铁锚   我要评论 这篇文章主要给大家介绍了关于如何查找YUM安装的JAVA_HOM ...

  9. Python变量详解

    Python变量详解 目录 Python变量详解 一.变量的定义 二.变量组成的三部分 2.1 变量名 2.1.1 变量名的命名规范 2.1.2 变量名的命名风格 2.2 赋值符号 2.3 变量值 三 ...

  10. Ansible Facts 变量详解

    Ansible Facts 变量详解与使用案例 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放: 3. ...

随机推荐

  1. JavaEE 启示录

    1. 对象在实例化之前(也就是没有new出来),就调用它的方法,那么可能会遇到null错误. 2. Eclipse默认会把Web项目发布到workspace\.metadata\.plugins\or ...

  2. 使用tomcat部署jsp程序

    安装java1.6.0到默认目录 下载apache-tomcat-6.0.32-windows-x86.zip,解压到D:\soft目录下 配置环境变量 JAVA_HOME C:\Program Fi ...

  3. 在android 中开发java.net.SocketException: socket failed: EACCES (Permission denied) 报错

    在android中下载文件,写好下载文件的代码后需要配置相应的权限 <uses-permission android:name="android.permission.INTERNET ...

  4. xcode报错http

    问题: Xcode项目发送网络请求时,报错:“App Transport Security has blocked a cleartext HTTP (http://) resource load s ...

  5. How (not) to trigger a layout in WebKit

    As most web developers are aware, a significant amount of a script's running time may be spent perfo ...

  6. 用Nginx+Lua(OpenResty)开发高性能Web应用

    在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡.反向代理.代理缓存.限流等场景:而把Nginx作为一个Web容器使用的还不是那么广泛.Nginx的高性能是大家公认的,而Nginx开 ...

  7. C++ 在容器中存放函数指针

    注意,对一般c++ 98标准编译器而言,容器泛型模板是不支持直接存放函数指针的.需要typedef将函数指针重命名. 比如,一个void返回值参数也为void的函数指针,需要 typedef void ...

  8. 十天学会<div+css>横向导航菜单和纵向导航菜单

    纵向导航菜单及二级弹出菜单 纵向导航菜单:一级菜单 <head><style type="text/css">body { font-family: Ver ...

  9. Tableau10.0学习随记-度量的聚合设置(取消度量汇总-展示所有数据)

    度量的聚合与取消聚合 a.根据度量指标分析时,有的度量值在直接拖取后,所展示的结果如下图所示: b.此时,如果需要展示所有数据的散点图,则可以取消菜单中的“分析-聚合度量”选项,如下图所示: c.调整 ...

  10. WEBSTORM 2016.3 activation code激活

    选择activation code 激活方式,复制粘贴下面的激活码43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIjoi ...