变量

变量是什么?

在数学中,我们对变量的概念有一定的了解和认识,如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. React.createClass vs. ES6 Class Components

    1 1 1 https://www.fullstackreact.com/articles/react-create-class-vs-es6-class-components/ React.crea ...

  2. TypeScript & Object Error

    TypeScript & Object Error Element implicitly has an 'any' type because expression of type 'any' ...

  3. js form.onformData事件

    在表单提交前修改数据,此事件在submit之后 f1.addEventListener("formdata", (e) => { e.formData.append(&quo ...

  4. [Android 搞机]Twrp 中清除 data 和搞机清除的区别

    近日搞机,用上了 Havoc OS.突然发现设置里有个"加密手机",于是手贱点了进去.手机立刻重启了,然后卡在开机第一屏.遂进 Twrp 高级清除中清除了 data 并重新刷入.重 ...

  5. scala:分别使用懒汉式和饿汉式实现单例模式

    在java中,单例模式需要满足以下要求: 构造方法私有化,使得本类之外的地方不能使用构造方法new出对象 提供私有静态属性,接收单例对象 公共的.静态的getInstance方法,便于外界拿到单例对象 ...

  6. SpringBoot2.2.5整合ElasticSearch7.9.2

    1:前言 为什么是SpringBoot2.2.5,不是其他的SpringBoot版本,原因有两个: 1:SpringBoot2.2.0以上才能支持ElasticSearch7.x版本. 2:Sprin ...

  7. 使用Reactor完成类似的Flink的操作

    一.背景 Flink在处理流式任务的时候有很大的优势,其中windows等操作符可以很方便的完成聚合任务,但是Flink是一套独立的服务,业务流程中如果想使用需要将数据发到kafka,用Flink处理 ...

  8. EF获取数据库表名和列名

    EF获取数据库表名和列名 新建 模板 小书匠 /// <summary>  /// 通过当前DBContext上下文获取对应数据库中所有得表  /// </summary>  ...

  9. wxWidgets源码分析(6) - 窗口关闭过程

    目录 窗口关闭过程 调用流程 关闭文档 删除视图 删除文档对象 关闭Frame App清理 多文档窗口的关闭 多文档父窗口关闭 多文档子窗口关闭 窗口的正式删除 窗口关闭过程总结 如何手工删除view ...

  10. 看完我的笔记不懂也会懂----Node.js

    Node.js 学习 - 命令行窗口 - 进程与线程 - ECMAScript的缺点 - Node模块化 - Node中的全局对象 - 包 package - NPM包管理器 (Node Packag ...