变量

变量是什么?

在数学中,我们对变量的概念有一定的了解和认识,如y=x^2,其中,x,y都是变量。

定义

一个变量就是存储区(内存)中的一个存储单元

变量的声明及初始化

使用变量的步骤

  1. 声明一个变量: 根据类型分配空间

    1. 根据指定的类型定义一个变量的名称

    2. 语法:

                  int money = 5;          //变量类型  变量名 = 数值;

                 int money1;              //变量类型 变量名;
                 money1 = 10;           //变量名 = 数值;

                 int money2, money3, money4;//变量类型 变量名1,变量名2,...,变量名n;
  2. 初始化变量: 将数据存入内存空间

  3. 使用变量: 取出数据的使用

变量的声明

声名变量就是创建一个变量,并给一个名字

变量的命名规则

  1. 变量名 = 首字母(字母或者下划线"_")+ 其余部分(任意多的数字字母下划线"__")。不能以数字开头,一些特殊符号也不能使用。汉字也可以作为变量名,但是不建议使用。

  2. 简短且能清楚的表明变量的作用,通常第一个单词的首字母小写,其他单词的首字母大写。例如:myScore

  3. 变量名不能与C#关键字冲突,例如:int static = 30;

  4. 变量区分大小写,两个同样的单词,大小写有差别的话不冲突。区分开来的

简单数据类型

值类型:直接存储值

简单类型
  • 数值型

    • 整数型

      sbyte、short、int、long。正负数都可存储

      usbyte、ushort、uint、ulong。只能存储正数

    • 浮点型:

      float a = 1.22f;//在值的后边加上f则为指定赋值为float类型
                 double b = 1.22d;//在值的后边加上d则为指定赋值为double类型
                 double c = 11.1;//double类型默认省去后缀d。其他类型不行
                 decimal d = 1.11m;//此类型时专门用来提供货币计算的,精度非常高,赋值时需要在后缀加M或m
  • 字符型

    • String

      String和string不区分大小写,和object差不多。最主要简化的作用时简化字符串操作。它是特殊的引用类型,它拥有不可改变性,它赋值之后数据不会改变,表面上的改变,实则是在内存中重新生成了另一个对象,并给予赋值。

    • char

      该类型基本用不到,我只知道java中的io流会用,C#初学完全用不到貌似

  • 布尔型

    • 布尔类型主要用于来表示true/false值,C#中定义布尔类型时,需要使用bool关键字,它的值只能是true或者false,它的默认值时false

    • true

    • false

引用类型:存储对值的引用

object类型

object = System.Object

object是所有类的基类。在定义其它类时,可以直接使用object提供的一些通用方法。

String类型

string = System.String

在简单类型中字符类型里记录过,不再详写。

引用类型就是引用别的类为自己所用,其中赋予的值是互通的,都存放在堆里边,而对象名(先创建需要引用的类的对象,才能引用该类中的数据)则存储在栈里边,指向对应的堆中的数据。值类型都存放在栈里边。

变量的初始化

给一个变量赋值,就是给该变量初始化。

变量的作用域

class Program
  {
   String str = "实例变量";//实例变量在类中,方法外创建的变量为成员变量。
   static String str2 = "静态变量";//静态变量
       static void Main(string[] args)
      {
           Program program = new Program();//先创建类的对象
           Console.WriteLine(program.str);       //然后通过类的对象来调用实例变量

           Console.WriteLine(str2);//直接调用静态变量
           int a =  0;//在方法体内创建的变量就是局部变量
           Console.WriteLine(a);//方法中使用局部变量可以直接调用

           Console.WriteLine();//无法使用另一个方法内的局部变量!!!
           Console.ReadLine();
      }
       static void Test()
      {
           int b = 2;
           Console.ReadLine();
      }
  }

引用类型和值类型的区别

值类型就是简单的一对一存储,都存储在栈中,不可互通。

引用类型则是多对一,引用数据存储单独在堆中,而需要引用该数据的对象名则存储在栈中,分别对应堆中的存储数据。堆中的存储数据改变后,每个引用该数据的对象都会发生变化。

class Program
  {
       static void Main(string[] args)
      {
           RefAndValue.Record();
           Console.Read();
      }
  }

   class Card                                         //1. 创建一个类
  {
       public string Name { get; set; }    //2. 给类中定义一个引用类型
       public int Age { get; set; }            //3. 再给类中定义一个值类型
  }
   static class RefAndValue                  //4. 再定义一个引用类型和值类型的对比类,来进行对比操作
  {
       public static void Record()           //5. 定义一个静态方法便于调用
      {
           Card card1 = new Card { Age = 18, Name = "张三" };//6. 创建一个Card的对象,并初始化
           Card card2 = new Card { Age = 20, Name = "赵四" };//7. 再创建一个Card对象,并初始化
           int age = card1.Age;                //8. 使用int对象来记录未修改前的值
           card1.Age = 30;                       //9. 对值类型修改,之后来查看是否会影响到另外的值

           Card card3 = card2;                 //10. 利用card2创建一个新的Card对象
           card2.Name = "王五";              //11. 修改card2中的引用类型,之后来查看是否会影响另外的值
           Console.WriteLine("card1的Age:" + card1.Age);
           Console.WriteLine("age:" + age);//分别查看俩个值是否一样

           Console.WriteLine("card2的Name:" + card2.Name);
           Console.WriteLine("card3的Name:" + card3.Name);//分别查看两个值是否一样
           //最后再在Main方法中调用来运行,查看结果以作对比。
      }
  }

使用变量时的一些错误

错误都是字面意思QAQ!!!,就不一一阐述啦,就是一些,命名错误,忘记赋值,赋值类型错误什么的。报错框都会写出来的

枚举

枚举相当于一种特殊的字段,它是值类型的数据。他主要是声明一种具有相同性质的常量,比如说我们经常使用的日期数据,我们可以把这些数据组织成多个不同名称的枚举字段

  1. 语法:访问修饰符 enum 枚举名{值1,值2,值3...}

  2. 枚举是一组描述性的名称

  3. 枚举定义一组有限的值。不能包含方法

  4. 对可能的值进行约束

  5. 枚举允许描述性名称表示整数值

    public enum MRKJ//定义一个枚举
      {
           Java = 1,
           C = 2,
           CS = 3,//如果不给予赋值的话,它会自动从1递增给予赋值。最后一个不用再加逗号,
      }
       class Program
      {
           static void Main(string[] args)
          {
               int i;
               Console.WriteLine((int)MRKJ.Java);//不加前置转换的话输出枚举字段,如果加前置转换的话会输出枚举字段自己的值。
               Console.Read();
          }
      }
  6. 在实际开发中,经常使用枚举来作为用户的使用权限,根据枚举字段所表示的用户权限来设置各级别的用户所拥有的不同的操作权限

数据类型的转换

  1. 自动转换

    1. 在某种条件下,系统自动完成类型的转换(即隐式类型转换)

      1. 两种类型兼容。例如:double兼容int类型

      2. 目标类型精度大于源类型。例如:double类型的精度大于int类型

  2. 显式类型转换(也叫做前置类型转换)

    1. (类型名)表达式 ;

      显式类型转换会丢失一些精度。操作方式为,在需要转换的数据前边加上括号,括号内写转换后的数据类型。例如

      int i = (int)(11.2+11.3);

      如果被转换的数据类型大于转换后的数据类型的区间,并不会报错,但是会溢出错误。比如说转换前是long类型转换成int类型是大于int的最大区间。转换后的值就会变成int最大区间的值。此时需要使用第二种显式类型转换。

    2. Convert.To类型名(表达式);

                  double a = 10.5;
                 int c = Convert.ToInt32(a);

      使用此方式,如果出现数据溢出的情况,他会报错提醒你。

    3. 类型名.Parse(表达式)

      此方法只针对数值类型来转换,其他的类型是没有这个方法的。

                  long a = 1111111111111111111;
                 int c = int.Parse(a.ToString());
  3. 装箱和拆箱

    1. 装箱

      1. 把值类型转换成引用类型被称为装箱操作

      2.             int a = 10;//定义一个值类型
                   object obj = a;//把值类型转换成引用类型,把值类型的变量,隐式的转换为Object的变量。
    2. 拆箱

      1. 把装箱好的object类型,显示转换成值类型

      2.             int a = 10;//定义一个值类型
                   object obj = a;//把值类型转换成引用类型,把值类型的变量,隐式的转换为Object的变量。
                   int b = (int)obj;//把装箱好的引用类型显式转化类型为值类型
      3. 执行拆箱操作时,转换的类型,必须和装箱时被转换的值类型的数据类型相同。装箱时为int,拆箱时也只能拆成int类型。

      4. 装箱拆箱对于程序的性能影响很大。装箱时需要重新创建一个全新的对象来存储它的值。这是肯定会比你直接赋值需要的时间多,拆箱时需要用到前置类型转换,需要的时间也很多。

学习C#第二天的更多相关文章

  1. RabbitMQ学习总结 第二篇:快速入门HelloWorld

    目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...

  2. 学习KnockOut第二篇之Counter

                                                                        学习KnockOut第二篇之Counter        欲看此 ...

  3. 《DOM Scripting》学习笔记-——第二章 js语法

    <Dom Scripting>学习笔记 第二章 Javascript语法 本章内容: 1.语句. 2.变量和数组. 3.运算符. 4.条件语句和循环语句. 5.函数和对象. 语句(stat ...

  4. The Road to learn React书籍学习笔记(第二章)

    The Road to learn React书籍学习笔记(第二章) 组件的内部状态 组件的内部状态也称为局部状态,允许保存.修改和删除在组件内部的属性,使用ES6类组件可以在构造函数中初始化组件的状 ...

  5. JavaWeb学习总结第二篇--第一个JavaWeb程序

    JavaWeb学习总结第二篇—第一个JavaWeb程序 最近我在学院工作室学习并加入到研究生的项目中,在学长学姐的带领下,进入项目实践中,为该项目实现一个框架(用已有框架进行改写).于是我在这里记录下 ...

  6. [HeadFrist-HTMLCSS学习笔记]第二章深入了解超文本:认识HTML中的“HT”

    [HeadFrist-HTMLCSS学习笔记]第二章深入了解超文本:认识HTML中的"HT" 敲黑板!!! 创建HTML超链接 <a>链接文本(此处会有下划线,可以单击 ...

  7. TensorFlow 深度学习中文第二版·翻译完成

    原文:Deep Learning with TensorFlow Second Edition 协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标.--<原则>, ...

  8. 菜鸟Python学习笔记第二天:关于Python黑客。

    2016年1月5日 星期四 天气:还好 一直不知道自己为什么要去学Python,其实Python能做到的Java都可以做到,Python有的有点Java也有,而且Java还是必修课,可是就是不愿意去学 ...

  9. Python学习【第二篇】Python入门

    Python入门 Hello World程序 在linux下创建一个叫hello.py,并输入 print("Hello World!") 然后执行命令:python hello. ...

  10. Android学习笔记(第二篇)View中的五大布局

    PS:人不要低估自己的实力,但是也不能高估自己的能力.凡事谦为本... 学习内容: 1.用户界面View中的五大布局... i.首先介绍一下view的概念   view是什么呢?我们已经知道一个Act ...

随机推荐

  1. Dart & import show & import hide & import as & part & part of

    Dart & import show & import hide & import as & part & part of // 部分导入,即仅仅导入 dart ...

  2. Google Meet & gmail & video conference

    Google Meet & gmail & video conference Conv-2019 & live stream Google Meet https://meet. ...

  3. vue 使用stylus

    λ yarn add stylus stylus-loader --dev <style scoped lang="stylus"> div color #ff4488 ...

  4. 牛市下SPC新空投糖果来了

    2021年元旦刚过没几天,比特币就开启了牛市的旅程,比特币涨至三万四千美元,率领众多币种暴涨,一股浓浓的牛市味道来了. 虽然从昨天开始,比特币带领着主流币进行了一波调整,但是只涨不跌的市场是 大家说比 ...

  5. 使用docker mediawiki,搭建网页wiki

    我只是想做一个大家都能访问的wiki,用于成员间共享和维护一些文档.找到了docker的mediawiki,这里记录一下我怎么搭的吧. 首先,如果你在一个局域网里,有公用的可以访问的服务器,那可以直接 ...

  6. [计算机图形学]绘制填充模型:重心坐标、z-buffer

    目录 一.点乘和叉乘 0. 向量表示 1. 点乘 2.叉乘 2.1 坐标运算方式 2.2 向量运算方式 2.3 叉乘的用途 二.Bounding Box 三.重心坐标 四.z-buffer 五.总结 ...

  7. 缓存cache和缓冲区buffer

    一.cache 1.cache的定义.从宏观上讲,缓存是处理速度不匹配的问题.可以是静态缓存(内存缓存.磁盘缓存).动态缓存(前端的缓存)和数据库缓存.另一个角度,从CPU来看,可以是寄存器和内存之间 ...

  8. 后端程序员之路 33、Index搜索引擎实现分析2-对外接口和大体流程

    # index_manager的单例是index server对外的唯一接口,part_indexer是index搜索的核心部分,index_manager持有了一组part_indexer. typ ...

  9. [极客大挑战 2019]Secret File 1

    题目的名字就暗示我们考点文件隐藏进入页面查看源码 得到隐藏的界面点击访问 点击给的"SECRET"按钮页面出现提示"没看清么?回去再仔细看看吧.",说明响应的时 ...

  10. Mybatis系列全解(四):全网最全!Mybatis配置文件XML全貌详解

    封面:洛小汐 作者:潘潘 做大事和做小事的难度是一样的.两者都会消耗你的时间和精力,所以如果决心做事,就要做大事,要确保你的梦想值得追求,未来的收获可以配得上你的努力. 前言 上一篇文章 <My ...