苏飞论坛

标题: [C#基语法]之C#变量(1) [打印本页]

作者: 站长苏飞    时间: 2013-5-14 08:59
标题: [C#基语法]之C#变量(1)
                                                [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?等
变量的基本说明与定义就到这里止。到具体类型时咱们再一个一个的看他们具体的用法。
大家说说自己的看法吧。
记得跟贴哦。



作者: yangying    时间: 2013-5-14 09:13
我来坐沙发了
作者: 54clz    时间: 2013-5-14 09:16
顶。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
作者: 幻雪丶逆时光    时间: 2013-5-14 09:18
强烈支持楼主ing~
作者: Eagle    时间: 2013-5-14 09:25
好帖!
作者: xianfeng    时间: 2013-5-15 13:03
顶一下
作者: 格林童话    时间: 2013-5-21 01:19
int? a = null;
作者: 格林童话    时间: 2013-5-21 01:19
第一次看到这样赋值。学习了。
作者: wanglp1976    时间: 2013-5-21 10:58
来晚了, 顶一下
作者: jsj_wj    时间: 2013-5-27 13:59
很好。很直观,比看书理解的快多了

作者: yangying    时间: 2013-5-27 15:24
jsj_wj 发表于 2013-5-27 13:59
很好。很直观,比看书理解的快多了

哈哈,就是要超过书的复杂,但又不是失他的真谛

作者: amwlgywxf    时间: 2013-5-29 10:51
强烈支持!!!
作者: 天天    时间: 2013-5-31 16:44
在自动生成的架构里有看到这样的东西  不过以前都没怎么注意
作者: erlangasd    时间: 2013-6-1 14:56
学习完了,就回下帖,看这个比看书直观多了。
作者: fireant    时间: 2013-6-5 10:50
太好了,老大辛苦了
我会认真学习的
作者: 无限幻想    时间: 2013-6-8 00:09
非常不错的教程
作者: Lucker    时间: 2013-6-12 22:24
其实在 Student s1 = s;这一句时s1得到的并不是s的值,页是s的地址。当然修改时也是修改的地址对应的值,当然s的值为根据s1的值改变了


学习了.
作者: /mg_艾    时间: 2013-6-28 08:52
新手学习,顶楼主
作者: 水元子    时间: 2013-7-10 13:36
小飞飞,顶你!

作者: 一座城池    时间: 2013-7-12 17:05
学习了
作者: butterfly1107    时间: 2013-7-24 14:39
请问:int? a = 50;表示此时将50赋值给变量a,但是a可以是空值的,这种情况在编程时用的多吗,一般用在哪里,能举例说明吗,谢谢。

作者: xxhj401    时间: 2013-8-12 12:07
听君一席话   受教了
作者: pzw520125    时间: 2013-8-28 16:39
学习了

作者: 箛煙矗    时间: 2013-9-27 11:08
学习到了!
作者: 隐_瘾_影。    时间: 2013-9-27 16:31
顶。
作者: abc    时间: 2013-11-10 17:59
学习了
作者: 你好__2013    时间: 2013-11-17 09:43
为什么 出现了个S2啊  就是在引用类型那儿
作者: lewis_fang    时间: 2013-12-13 11:18
受教了,学习中……
作者: mmgx2013    时间: 2013-12-21 15:44
多谢分享;

s.name=sufei; s.age=24;
s1.name=小李; s2.age=26;

此处是否是笔误

作者: 站长苏飞    时间: 2013-12-22 21:07
butterfly1107 发表于 2013-7-24 14:39
请问:int? a = 50;表示此时将50赋值给变量a,但是a可以是空值的,这种情况在编程时用的多吗,一般用在哪里 ...

数据库里当你的Int类型可为空时对应 的就 是这个类型

作者: 站长苏飞    时间: 2013-12-22 21:09
mmgx2013 发表于 2013-12-21 15:44
多谢分享;

s.name=sufei; s.age=24;

这是 真是,呵呵,已修改,多谢提醒

作者: mzllzl    时间: 2013-12-23 14:50
认真学习中。
“其实在 Student s1 = s;这一句时s1得到的并不是s的值,是s的地址。”这个字是不是打错了,应该是而吧?
作者: _tawtg    时间: 2014-1-10 11:53
请问使用?定义的变量是值类型还是引用类型。
作者: 站长苏飞    时间: 2014-1-10 11:58
值类型,或者你可以测试下,简单数据类型都是值类型,只有对象才是引用类型
作者: _tawtg    时间: 2014-1-10 12:57
站长苏飞 发表于 2014-1-10 11:58
值类型,或者你可以测试下,简单数据类型都是值类型,只有对象才是引用类型

应该不算是值类型吧,只是一种包含值类型的数据类型,因为定义是Nullable<T> 。{:soso_e102:}

作者: a395849181    时间: 2014-1-24 20:08
顶起......................好好学习啦..............
作者: 风徐徐    时间: 2014-2-24 00:26
不错不错,
作者: BeyondPC    时间: 2014-2-24 16:18
不错,一点点跟着学。
作者: palysh    时间: 2014-3-12 08:50
膜拜中……
作者: 雪糕gis    时间: 2014-3-28 21:25
好贴必须要顶的呀
作者: lovebeyond    时间: 2014-4-1 17:17
膜拜中……
作者: ﹏月无痕    时间: 2014-4-14 14:38
学习中 能看几章看几章
作者: ls602076817    时间: 2014-4-16 16:50
第一次接触C#表示看得不太懂啊

作者: 幸福de羊    时间: 2014-4-23 17:06
顶,从头开始学习,谢谢楼主,如果出书必定支持。
你的帖子是我们学习的动力和财富!
作者: hzq1984    时间: 2014-5-16 13:51
在变量类型后添加“?”表示可空值类型。
int? a=null;

亮点
作者: hzq1984    时间: 2014-5-16 13:55
站长苏飞 发表于 2013-12-22 21:07
数据库里当你的Int类型可为空时对应 的就 是这个类型

数据里有很多需要应用的这个的空值;学习了

作者: ed2000de    时间: 2014-5-23 11:59
原来“?”是这样用的
作者: 一叶知秋    时间: 2014-5-25 15:08
受教了,学习中……
作者: 想学C#    时间: 2014-6-4 14:32
真是难得给力的帖子啊,强烈支持楼主。
作者: zchyua    时间: 2014-6-9 14:51
学习了!
作者: skhj888    时间: 2014-6-18 15:49
好,经典
作者: Joy的池塘    时间: 2014-7-10 15:18
楼主写的很细啊
作者: snmysky    时间: 2014-7-13 08:28
受教了,学习中……

作者: 项庄舞剑    时间: 2014-8-28 15:04
膜拜中....!
作者: zasray    时间: 2014-9-8 21:47
受教了学习中……
作者: 谜独白    时间: 2014-10-10 18:19
lz好人,顶!
作者: liu67667    时间: 2014-10-23 17:38
受教了学习中……正在学习中!!!
作者: gtoliushan    时间: 2014-11-21 11:18
真是难得给力的帖子啊。
作者: EasonShen    时间: 2014-12-1 23:50
受教了学习中……
作者: lsj418    时间: 2014-12-5 14:30
我在学基础,几个月不学习,全忘记了。努力吧。
作者: feng~yang    时间: 2015-4-19 14:35
看过帖子回复一下是个好习惯
作者: 永哥New    时间: 2015-9-19 09:00
努力学习ING...
作者: yuan88008    时间: 2015-10-16 14:21
写的很好
作者: nimeia    时间: 2015-11-11 17:36
强烈支持楼主ing……受教了
作者: mxlwin    时间: 2016-6-8 14:05
NO.1 C#变量基本了解
作者: qc731600347    时间: 2018-5-29 12:50
真皮沙发,顶。。。。。。。。。。。。。。。。。。。。。。。
作者: 雕兄007    时间: 2018-8-11 14:44
我只是路过打酱油的。
作者: njjwdy    时间: 2018-10-22 15:28
补一下基础知识,当初学的时候没听懂,现在回来看看 很清晰。
作者: BlueStone    时间: 2020-7-23 16:34
特地来学习的




欢迎光临 苏飞论坛 (http://www.sufeinet.com/) Powered by Discuz! X3.4