苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

分布式系统框架(V1.3) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper万能框架(V2.3) HttpHelper官方出品,无敌框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V1.9) 最牛的爬虫类,没有爬不到只有想不到 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 18592|回复: 67

[C#基语法] [C#基语法]之C#变量(1)

[复制链接]
  • TA的每日心情
    开心
    昨天 09:05
  • 签到天数: 643 天

    [LV.9]以坛为家II

    发表于 2013-5-14 08:59:27 | 显示全部楼层 |阅读模式
                                                    [C#基语法]之C#变量
    系列文章导航

      [C#基语法]苏飞传奇版   http://www.sufeinet.com/thread-3091-1-1.html

    定义

        被用来存储特定类型的数据,可以根据需要随时改变所存储的数据值。具有名称,类型和值这就是变量
    分类

        值类型
    什么样的变量是值类型呢?看值类型的特点吧
    1.值类型变量都存储在堆栈中。2.访问值类型变量时,一般都是直接访问其实例。
    3.每个值类型变量都有自己的数据副本,因此对一个值类型的变量的操作不会影响其他的变量。
    4.复制值类型变量时,复制的是变量的值,而不是变量的地址
    5.值类型变量不能为null,必须具有一个确定的值。
        引用类型
    1.必须在托管堆中为引用类型变量分配内存。2.必须使用new关键字来创建引用类型变量。
    3.在托管堆中分配的每个对象都有与之相关联的附加成员,这些成员必须被初始化。
    4.引用类型变量是由垃圾回收机制来管理的。
    5.多个引用类型变量都可以引用同一个对象,这种情形下,对一个变量的操作会影响另一个变量所引用的同一对象。
    6.引用类型被赋值之前的值都是null。

    看了以上值类型和引用类型大家有什么样的想法,是不是想问一下什么样的才是值类型,什么样的又是引用类型呢?
    其实我给大家一个简单的方法来做判断,那就是看它New不New如果使用New了肯定是引用类型,如果不使用可以直接认为是值类型
    再说类型之间的区别之前我先来说一下变量的定义
    格式是:datatype indentifier;
    例如:
    [C#] 纯文本查看 复制代码
      int a;
                int c=0;
                c = a;

    a这个时候会报
    1. 使用了未赋值的局部变量“a”
    复制代码
    这时Vs不会让我们使用这个变量,除非咱们给他一个值。
    如下
    [C#] 纯文本查看 复制代码
                int a=10;
                int c=0;
                c = a;

    这个时候才可以正常使用,这点大家一定要注意
    下面我以一个例子来说一下值类型的变量
    [C#] 纯文本查看 复制代码
      int a = 1;
                int c = 0;
                c = a;
                c = c + 1;
    

    大家现在可以猜一下c和a的值分别是多少。
    看下面,开始我们定义了两个变量,一个是a=1 c=0
    然后呢把a给了c值又让c加1,我们输出结果看一下
    [C#] 纯文本查看 复制代码
    c=2;   a=1;

    这说明什么,虽然说a给了c但是a确不会根据c的变量而改变,这就是值类型的变量

    下面咱们再一起来看看引用类型的变量
    看代码
    [C#] 纯文本查看 复制代码
     public class Student
        {
            /// <summary>
            /// 姓名
            /// </summary>
            public string name { get; set; }
            /// <summary>
            /// 年龄
            /// </summary>
            public string age { get; set; }
        }

    首先我们定义一个学生类,
    然后看下面代码
    [C#] 纯文本查看 复制代码
      //初始化一个学生类对象s
                Student s = new Student()
                {
                    //姓名为sufei
                    name = "sufei",
                    //年龄为24
                    age = "24"
                };
    
                //定义一个新的学生类对象s1
                Student s1 = s;
                s1.name = "小李";
                s1.age = "26";

    如果我们还安上面的思路来判断的话输出 的结果应该是
    [C#] 纯文本查看 复制代码
               
              s.name=sufei; s.age=24;
             s1.name=小李; s1.age=26;

    其实呢,这就是引用类型的特别,真实的结果并不是这样的
    看下输出的结果
    [C#] 纯文本查看 复制代码
       //现在输出s1 和s的值
                s.name=小李; s.age=26;
                s1.name=小李; s1.age=26;

    为什么他们的值是一样的呢、
    我们并没有修改s的属性值啊
    其实在 Student s1 = s;这一句时s1得到的并不是s的值,页是s的地址。当然修改时也是修改的地址对应的值,当然s的值为根据s1的值改变了
    好啦大家自己做下测试吧。
    扩展


    1.定义变量时,数据类型后面添加“?”

    在变量类型后添加“?”表示可空值类型。
    例如:
    [C#] 纯文本查看 复制代码
    int a = null;

    以上代码VS会提示错误:无法将 Null 转换成 “int” ,因为它是一种不可以为 null 值的类型。
    但写成以下格式就不会报错了:
    [C#] 纯文本查看 复制代码
    int? a = null;

    此时,变量a可以为空(null),并且可以通过它的 HasValue 属性来判断是否有值,并通过 Value 属性获得真正的值。
    它可以通过对包装类型直接赋值的方式隐式创建,如:
    [C#] 纯文本查看 复制代码
    int? a = 50;

    如Int32、结构体等这样的类型是不可能为空的,常见的如int,DateTime都是不可能为空的。所以在需要判断是否有值的场合,可以用加问号的可空值类型,如int?,DateTime?等
    变量的基本说明与定义就到这里止。到具体类型时咱们再一个一个的看他们具体的用法。
    大家说说自己的看法吧。
    记得跟贴哦。


    该用户从未签到

    发表于 2013-5-14 09:13:00 | 显示全部楼层
    我来坐沙发了

    该用户从未签到

    发表于 2013-5-14 09:16:27 | 显示全部楼层
    顶。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    该用户从未签到

    发表于 2013-5-14 09:18:03 | 显示全部楼层
    强烈支持楼主ing~

    该用户从未签到

    发表于 2013-5-14 09:25:34 | 显示全部楼层
    好帖!

    该用户从未签到

    发表于 2013-5-15 13:03:17 | 显示全部楼层
    顶一下

    该用户从未签到

    发表于 2013-5-21 01:19:24 | 显示全部楼层
    int? a = null;

    该用户从未签到

    发表于 2013-5-21 01:19:56 | 显示全部楼层
    第一次看到这样赋值。学习了。

    该用户从未签到

    发表于 2013-5-21 10:58:16 | 显示全部楼层
    来晚了, 顶一下

    该用户从未签到

    发表于 2013-5-27 13:59:08 | 显示全部楼层
    很好。很直观,比看书理解的快多了
    您需要登录后才可以回帖 登录 | 马上注册

    本版积分规则

    QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备17001017号-1 )

    GMT+8, 2018-12-13 07:41

    © 2017-2018

    快速回复 返回顶部 返回列表