变量

变量是什么?

在数学中,我们对变量的概念有一定的了解和认识,如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. js function call hacker

    js function call hacker you don't know javascript function https://developer.mozilla.org/en-US/docs/ ...

  2. nasm astrset_s函数 x86

    xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ...

  3. 类关系与uml图示表示

    1. 关联(Association).聚合(Aggregation).组合(Composition)区别 association: 两者之间存在某种关联即可,很弱的关系,如student and co ...

  4. 权限管理整合springsecurity代码执行过程

    (1)输入用户名密码. (2)进入认证过滤器中,执行attemptAuthentication方法, 通过该方法获取输入的用户名和密码. (3)执行实现了UserDetailsService接口的类中 ...

  5. eclipse定制工具栏,修改工具栏

    目前eclipse定制工具栏的入口就是window- customize perspective,在弹出的窗口中选择Tool Bar Visibility,选择要在工具栏中显示的快捷图标.注:在Too ...

  6. How DRI and DRM Work

    How DRI and DRM Work Introduction This page is intended as an introduction to what DRI and DRM are, ...

  7. Kafka集群消息积压问题及处理策略

    通常情况下,企业中会采取轮询或者随机的方式,通过Kafka的producer向Kafka集群生产数据,来尽可能保证Kafka分区之间的数据是均匀分布的. 在分区数据均匀分布的前提下,如果我们针对要处理 ...

  8. HDOJ-1160(最长上升子序列变形)

    FatMouse's Speed HDOJ-1160 注意输出长度的时候不是输出dp[n] #include<bits/stdc++.h> using namespace std; con ...

  9. HDR(高动态范围)

    一: 简介 一般来说,当存储在帧缓冲(Framebuffer)中时,亮度和颜色的值是默认被限制在0.0到1.0之间的. 但是如果我们遇上了一个特定的区域,其中有多个亮光源使这些数值总和超过了1.0,又 ...

  10. java 流程控制学习

    https://www.kuangstudy.com/course 用户交互Scanner import java.util.Scanner; public class Demo01 { public ...