C#变量详解
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#变量详解的更多相关文章
- mysql show variables系统变量详解
mysql系统变量详解 mysqld服务器维护两种变量.全局变量影响服务器的全局操作.会话变量影响具体客户端连接相关操作. 服务器启动时,将所有全局变量初始化为默认值.可以在选项文件或命令行中指定的选 ...
- net core体系-web应用程序-4net core2.0大白话带你入门-5asp.net core环境变量详解
asp.net core环境变量详解 环境变量详解 Windows操作系统的环境变量在哪设置应该都知道了. Linux(centos版本)的环境变量在/etc/profile里面进行设置.用户级的 ...
- Maya 常用环境变量详解
Maya 常用环境变量详解 前言: Maya 的环境变量让用户可以很方便的自定义 Maya 的功能. 在 Maya 的 Help 帮助文档中有专门的一个章节< Environment Varia ...
- Shell学习之Bash变量详解(二)
Shell学习之Bash变量详解 目录 Bash变量 Bash变量注意点 用户自定义变量 环境变量 位置参数变量 预定义变量 Bash变量 用户自定义变量:在Bash中由用户定义的变量. 环境变量:这 ...
- asp.net core环境变量详解
环境变量详解 Windows操作系统的环境变量在哪设置应该都知道了. Linux(centos版本)的环境变量在/etc/profile里面进行设置.用户级的环境变量在其它文件里面,不多说了,有兴趣的 ...
- 4、Ubuntu系统环境变量详解
参考:Linux公社Ubuntu系统环境变量详解 UNIX/Linux系统中的环境变量和库文件的使用方法 由于Linux系统严格的权限管理,造成Ubuntu系统有多个环境变量配置文件,因此我们需要了解 ...
- Nginx基础篇(2)- Nginx基本配置文件和变量详解
Nginx基本配置文件和变量详解 1. 基本配置文件 /etc/nginx/nginx.conf # nginx运行的用户 user nginx; # nginx进程数,建议设置为等于CPU总核心数. ...
- 如何查找YUM安装的JAVA_HOME环境变量详解
如何查找YUM安装的JAVA_HOME环境变量详解 更新时间:2017年10月27日 09:44:56 作者:铁锚 我要评论 这篇文章主要给大家介绍了关于如何查找YUM安装的JAVA_HOM ...
- Python变量详解
Python变量详解 目录 Python变量详解 一.变量的定义 二.变量组成的三部分 2.1 变量名 2.1.1 变量名的命名规范 2.1.2 变量名的命名风格 2.2 赋值符号 2.3 变量值 三 ...
- Ansible Facts 变量详解
Ansible Facts 变量详解与使用案例 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放: 3. ...
随机推荐
- 再战江湖。vuforia 初试
AR 里发现一个可用的项目 vuforia, 试着用用. 也是在很久不写博客后(以前全在百度博客上) 再次写
- 关于ViewPager、ViewFilpper、ViewFlow三种实现水平向滑动方式的比较
ViewPagerViewPager类提供了多界面切换的新效果.新效果有如下特征:[1] 当前显示一组界面中的其中一个界面.[2] 当用户通过左右滑动界面时,当前的屏幕显示当前界面和下一个界面的一部分 ...
- wmic 命令的一个汇总,功能很强大
获得系统版本信息wmic datafile where Name='c:\\windows\\explorer.exe' get Manufacturer,Version,Filename 获得系统进 ...
- 对COM 组件的调用返回了错误 HRESULT E_FAIL
.net ppt转pdf时报以下错误: 对COM 组件的调用返回了错误 HRESULT E_FAIL 在服务器端打开PPT,选项--另存为--PDF,发现PowerPoint报了个错误: “无法找到打 ...
- Install Sublime Text 3
$ sudo add-apt-repository ppa:webupd8team/sublime-text-3 $ sudo apt-get update $ sudo apt-get instal ...
- 荣品RP4412开发板烧写Ubuntu系统应注意SD卡内存大些
问:RP4412开发板用SD卡烧写光盘中的fastboot失败,现在如何补救呢? 答:INAND格式化, 利用usb来升级啊, 也有文档,看升级文档. 问: 这个是怎么回事? 答:你是升级什么系统? ...
- VS2003"无法启动调试 没有正确安装调试器"的解决办法
VS2003"无法启动调试 没有正确安装调试器"的解决方法 在用VS2003做项目的时候,经常调试程序,但是有时候回出现如下问题“无法启动调试,没有正确安装调试器,请运行安装程序或 ...
- 【转载】桥接Microsoft Word和浏览器
原文链接地址: http://www.infoq.com/cn/articles/convert-microsoft-word-to-html?utm_campaign=rightbar_v2& ...
- android 打包失败
如果在打包时提示: proguard returned with error code 1 并且在控制台中输出:'java'不是内部或外部程序或批处理文件 那么就说明你的环境变量出问题了,之前用的 ...
- Const(常量)与readonly(只读)的区别
const与readonly定义的值都不能更改,但它们到底有哪些异同点呢? Const ² Const是常量的意思,其定义的变量只能读取不能更改,且只能在定义时初始化,不能在构造函数与其它属性与方法中 ...