如鹏网.Net基础1 第二章:C#语言基础1

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如鹏网.Net基础1 第二章:C#语言基础1相关的知识,希望对你有一定的参考价值。

------------------------------------------------

重点提示:

1、基本数据类型的区别:char、byte、short、int、long;float、double;

2、CTS是什么?String和string的区别;

3、枚举类型;

4、自增自减;

5、如何交换两个变量;

6、赋值表达式的值:Console.WriteLine(a=b+1);赋值表达式也有值,它的值就是复制之后左边的值;

7、三元运算符:String s=(i==5?"你好":"我好");

8、if;if……else;if……else if……;案例:体重指数计算器;

9、switch……case;

------------------------------------------------

第 1 节   关键字和标识符

    C#定义了一些关键字(public/static/void/class/int/string),这些关键字是构成C#基本语法用的。(默认蓝色)

    Main、String、Console等这些都不是关键字。(默认线绿色)

  标识符是用来给类、方法、变量等命名用的。

    命名规则:1)由字母、中文(不推荐)、数字、下划线 组成;

         2)不能以数字开头;

         3)不能是关键字。

    C#语言是大小写敏感的:demo和Demo是两个东西;

    驼峰命名法:每个单词第一个字母大写。如果是变量,第一个单词首字母要小写

    标识符要有意义;

    标识符的命名规范,不是强制规定,而是“潜规则”:

      类名、方法名:大写开头

      变量名:小写开头

       中文可以做变量名,不建议用。

      特殊符号不能组成标识符。

  (*)扩展:有同学提到“C#中也可以用@做标识符,

  比如int @a=5;int @int=6;”,其实@只是一个转义符而已,并不是标识符的一部分。

   特殊符号不能组成标识符。

------------------------------------------------

 第 2 节   变量的声明和赋值、变量的作用域

  程序所使用的数据一般都是内存中的。操作内存的时候要使用地址,通过指向内存的指针操作内存,

变量是给这段内存取一个名字。我要告诉别人如何使用这块内存的话需要给这块区域取一个名字,比如price,这就是变量名“price”。

  变量 和 数据是两个东西。

    声明+赋初值 变量类型 变量名=初始值(匹配类型的)

  声明:变量类型 变量名;

  赋值:变量名=初始值;

  变更使用之前必须赋初值。

  变量的作用域:在同一个作用域内一个变量只能声明一次。

------------------------------------------------

 第 3 节   数值类型简介和显式隐式转换  

  数值类型:

    整数类型:

        类型        占用字节  取值范围

        byte(字节)      1    0到255        无符号(内存的最小单位)

        short(短整)            2           -2^15到2^15-1

        int(整型)              4         -2^31到2^31-1

         long(长整)             8        -2^63到2^63-1

    小数类型:

            float(单精度浮点数)     4          不用记

        double(双精度浮点数) 8     不用记

       long > int >short >byte

     double > float  

      1、byte是“字节”类型,代表一个8位二进制,也就是一个字节。

      2、整数常量默认是int类型,小数常量默认是double类型。

      3、选用数据类型的时候在考虑到数据的可能范围之后,选择最小范围的类型,这样节省资源

        注:项目命名不要用中文和特殊字符。

    超范围:编译错误,无法生成exe。

  类型转换:(编译只看类型,不看实际值)

    小范围转换成大范围是 隐式类型转换

    大范围转换成小范围必须显式类型转换,可能数据丢失 (类型)

------------------------------------------------

 第 4 节   float和double的声明类型转换等问题 

   小数类型默认是double,当声明float类型时,必须加F(f)

   注:显示数据转换时,要注意丢失数据问题。

  1、声明

  double d1 = 3.14D;//ok,3.14d也可以

  double d2 = 3.14;//ok,一般不用写“D”

  double d3 = 3;//ok

  float f1 = 3.14;//error:不能从 double 转换为 float。小数默认是double

  float f2 = 3.14F;//ok,3.14f也可以

 

  2、小数类型转换

  double d1 = 3.14;

  float f1 = 3.14F;

  double d2 = f1;//ok,隐式类型转换

  float f2=d1;//error:不能从 double 转换为 float

  float f3=(float)d1;//ok,显式类型转换

  int i1 = d1;//error

  int i2 = (int)d1;//ok,显式类型转换,会丢失小数部分

  double d3 = i1;//ok,隐式类型转换

 

  3、加(+)减(-)乘(*)除(/)  

  整数/整数 结果是整数

  有小数参与的运算,结果是小数类型 (加F)

  计算5除以8:

  Console.WriteLine(5 / 8);   //     result:  0   因为两边都是int 结果会隐式转换成int (丢失小数部分)

  Console.WriteLine(5.0 / 8.0);  //       result: 0.625   因为两边都是double 结果是double  

  Console.WriteLine(5.0 / 8);  //          result: 0.625  因为有一个数是double 结果是double 

  Console.WriteLine(5F / 8F); //    result: 0.625   因为全部是float 结果是float  

  Console.WriteLine(5D / 8D);  //   result: 0.625   因为两边都是double 结果是double  

  Console.WriteLine(5 / 8f);  //     result: 0.625   因为有一个数是小数类型 结果是小数类型

------------------------------------------------

 第 5 节   String的声明主要是转义符的问题 

   常用数据类型:

       string(String)由字符组成的串,用英文的双引号引起来 ""  。

    ‘‘  :长度为0的char

    ""  :长度为0的字符串,有字符串 ,空字符串 等于string.Empty

    string.Empty :空字符串

    null  : 不等于空字符串

    "0"   :  

    \ (反斜线):转义  后面的字符有特殊含义   \n 换行字符   \\  一个斜线  \"\"    一对双引号

    在字符串前加“@”:告诉编译器,没有转义字符,(@只对\有作用,当有引号时,不要用@)

------------------------------------------------

 第 6 节   char、bool以及string和数值类型的转换 

   char: 代表一个字符(有且只有一个字符) ,英文的单引号 ‘‘,长度只能为1

      可以是转义字符: char c=‘\n‘;   ‘\\‘  ‘\"‘  ‘\‘‘

        bool:  true  false  就两种状态 (两个值)

    int:

    最大值int.MaxValue ;

    最小值: int.MinValue,  其他数值类型也可以通过MaxValue、MinValue获取取值范围。

   其他数据类型转换为string:convert

     a.ToString()  //null 抛异常

    推荐:Convert.ToString()  //null 不抛异常

   显式类型转换仅限整数、小数类型之内。Cast  (类型有交集)

   String转换为int/long:

    Convert.ToInt32("123")、 Convert.ToInt64("456")

------------------------------------------------

 第 7 节  CTS(大写String和小写string区别是什么?)  

  1、不仅可以把C#编译成.Net IL,还支持Basic、Python、Ruby等语言,甚至还支持Java。不同语言中的数据类型定义是不一样的,

      .Net中定义了通用的数据类型(CTS,Common Type System):String、Int16、Int32、Int64、Boolean、Double。通过转到定义可以看到这些都是类(结构体)。

  2、C#语言规范中定义了string、int、long、bool、double等原始类型,编译器会把这些类型翻译成CTS中的类。反编译看IL就能看到了。

  string  int long bool double:C#系统关键字

   String Int32  Int64 Boolean Double:CTS中定义的类

------------------------------------------------

 第 8 节  枚举类型  

  1、有一些数据是开放性范围的,比如int、float、String。有些数据可选值是有限取值范围的,比如星座、月份名、方向,如果用1/2/3/4代表东南西北,那万一设置了8怎么办?

  2、枚举是一种定义确定取值范围的特殊类型语法:

  enum Dir

  {

  East,West,North,South;

  }

  3、使用Dir d = Dir.East;

  eunm 和是类的声明是平级的。(特殊的类)

------------------------------------------------

 第 9 节  基本运算符(余、自增自减、字符串)  

  1、运算符就是加(+)减(-)乘(*)除(/)等符号,英文键盘输入×÷很麻烦,所以用* /表示乘除。

  2、求余数运算符“%”:5%4为1、5%5为0、22%7为1。

  3、自增:++是对一个变量进行自增运算

      int x=3;

      x++;

    自减:--

  4、+还可以用来对字符串进行拼接:"abc"+"cde"

  5、+还可以与其他类型拼接:"hello"+5

  6、"hello"+5+5、"hello"+(5+5)、5+5+"hello"的区别。

  7、表达式从左向右扫描进行扫描运算,一旦遇上一个字符串,之后的运算就变成字符串了。

  8、提问:3+5+"hello"+5+3 结果是什么。答案请向下拉 8hello53

 

  字符串和任何其他数据相加都是拼接字符串(其他数据转换成字符串)。

   "hello"+5+5    //hello55

        5+5+"hello"    //10hello   运算从左向右

   "hello"+(5+5)   //hello10  括号改变运算优先级

------------------------------------------------

第 10 节  赋值运算符和实现加法计算器

  1、int i=5;

  应该读成“声明int类型变量i,并且把5赋值给i”。

      = :赋值运算符不是“等于”的意思 ,左边只能有一个变量

  +=:  i=i+3   i+=3

  -=:  i=i-3    i-=3

  *=:  i=i*3   i*=3

  /=:  i=i/3    i/=3

------------------------------------------------
第 11 节  变量的复制传递和交换两个变量的值

  复制传递。(让变量2指向变量1 “当前”所指向内存的值)

  1、交换两个变量的值:

1
2
3
4
5
6
int i=10;
int j=20;
int temp = i;//temp:10;i=10;j=20;
i=j;//temp:10;i=20;j=20;
j=temp;//temp:10;i=20;j=10;
Console.WriteLine("i="+i+";j="+j);

 

  2、另一种不需要中间变量的做法

    int i=3;
    int j=5;   //   j=5
    i=i+j;  //  i=8
    j=i-j;    //    j=3
    i=i-j;    //    i=5
 

  3、变种不用中间变量交换两个值方法:

        int i=100;
            int j=4;
           
            i=i-j;
            j=i+j;
            i=j-i;

 

------------------------------------------------
第 12 节  关系运算符和运算符优先级

  比较运算符:(关系运算符)用来进行值的真假性判断,结果为bool类型。

    ==  等于(相等)

    !=   不等于(不相等)

    >    大于

    >=  大于或等于

    <    小于

    <=  小于或等于

  运算符优先级:

    程序不仅是给编译器看的,更重要是给程序员看的。

    “()” 最伟大的括号解决一切烦恼。

    程序可读性很重要,不要写出别人看不懂的代码。

------------------------------------------------
第 13 节  赋值表达式也有值  

  1、下面程序的执行结果是什么?

  int a=3;

  int b=4;

  Console.WriteLine(a==b); //false

  Console.WriteLine(a=b); //4

  2、赋值运算本身也是一个值,这个值就是赋值之后左边的值。

  int i=(a=b)+3;

  Console.WriteLine(i); //7

  这个b1呢?bool b1 = (a=b); //编译错误:类型不对,不能赋值

  这个b3呢?

  bool b1 = false;

  bool b2 = true;

  bool b3=(b1=b2);   //true

------------------------------------------------
第 14 节  前自增和后自增的区别 

  1、

  int i=10;

  int i1=i++;

  Console.WriteLine(i1); //10

  Console.WriteLine(i); //11

 

  int j=10;

  int j1=++j;

  Console.WriteLine(j1); //11

  Console.WriteLine(j); //11

  2、i++是赋值之后再自增,++i是先自增再赋值。

  i--和--i也是一样的,自己试验。

   没有赋值时,i++(表达式的值是i)和++i(表达式的值是i+1),没区别(写程序避免++i)

这个问题面试时常考!

------------------------------------------------
第 15 节  逻辑运算符(与或非) 

  用来对布尔类型的值进行运算的

  二元运算符:+ - * / % 

  一元运算符:!

  &&:(并且)二元运算符,两边都是true结果才是true。“我是中国人”“我是男人”只要有一个为假,那么“我是中国人 并且 我是男人”就是假。

   ||:(或者)二元运算符,只要有一个是true结果就是true。“我是中国人”“我是男人”只要有一个为真,那么“我是中国人 或者 我是男人”这个判断就是真。

     !:(非)一元运算符,取反,真的变假,假的变真。

------------------------------------------------
第 16 节  逻辑运算符的短路问题 

   使用 && 和 || 时,注意知足问题,前面条件不成立时,就不去计算后面条件的值,直接给出判断结果。

   可以使用&和|,排除短路问题(很少使用,只要知道就行)。

  使用场所:

     int i=8;
            int j=0;
            bool b=(j!=0)&&(i/j==2);
            Console.WriteLine(b);
         可以简化运算(避免下一个条件出错的情况使用)    

     if(str!null && str.Length>5)

------------------------------------------------
第 17 节  三元运算符 

  条件表达式?表达式1:表达式1

  如果“条件表达式”为true,则表达式的值为“表达式1”,否则为“表达式2”

 

------------------------------------------------
第 18 节  if简介
  if(比较表达式){

    //一行或多行代码

  }

  当“比较表达式”为true时执行{}内的代码。

------------------------------------------------
第 19 节  if易错点

  1、if("必须是条件表达式") ,不能用if(i=10),C#中条件表达式必须是bool类型。

  2、哪怕只有一行代码,也不要省略大括号{}(形成良好的编程习惯)(不易读,增加出错概率)

  3、注意 if()后面不能有“;”封号,封号表示结束。

    {}表示一个作用域,叫作代码块。

    if(i==8); 相当于if(i==8){}

------------------------------------------------
第 20 节  else子句
  if语句还可以有else:

    if(比较表达式){

      //表达式为true时执行的代码块

    }

    else

    {

      //表达式为false时执行的代码块

    }

  好习惯:(不要排除一般不可能的情况

    判断字符串长度时,请写:

    if(name.Length<=0)

    {

      MessageBox.Show("请输入姓名");

    }else

    {

       MessageBox.Show(name+",你好!");

    }

------------------------------------------------
第 21 节  elseif及练习
  

    if(条件表达式1){

      //表达式1为true时执行的代码块

    }

    else if(条件表达式2)

    {

      //表达式1为false,表达式2为true时执行的代码块

    }

    else if(条件表达式3)

    {

      //表达式1为false && 表达式2为false ,表达式3为true时执行的代码块

    }

    else //可以不用最后的else,建议加上,更加严谨

    {

      表达式都为false时执行

    }

 

------------------------------------------------
第 22 节  if案例:省市联动选择

  要点:

    1.加载省数据到省列表中(列表填充)

    2.选择省后把对应的市列表加载到市列表中去

------------------------------------------------
第 23 节  if案例:体重指数计算器
   1、数据类型转换

   2、() :括号是万能的

   3、条件区间不留缝隙

------------------------------------------------
第 24 节  三元运算符和if之间的选择
  作业:用户输入出生的月份、日期,计算用户的星座,然后显示这个星座的说明。

  动手才是硬道理。

  1、三元运算符能实现的,基本if都能实现,但是if能实现的,三元运算符不一定能实现。

  2、简单的判断然后根据判断的bool结果进行简单的赋值才用三元运算符。

------------------------------------------------
第 25 节  switchcase

  定义:

    switch(表达式)

    {

      case 取值1:

        //执行语句A

      break;

      case 取值2:

        //执行语句B

      break;

      case 取值3:

        //执行语句C

      break;

      ........

      default:

        //都不满足执行的语句

      break;

    }

  1、表达式可以是byte ,short,int ,char,string,枚举类型,(long)。

  2、break意味着switch的结束,不能丢。default(可以不写,但强烈建议要写,代码严谨性)相当于if的else,当所有case都不匹配时,执行default。

  3、如果case中没有任何的代码,如果不写break,则会贯穿到下一个代码。

  多个switch条件合并的问题:当多个case条件的代码一样时,可以合并,最后一个加break;

  只有当进行离散值判断的时候,switch可以用来替换if。switch能做的if都能做,反之不一定。

如鹏网:http://www.rupeng.com

以上是关于如鹏网.Net基础1 第二章:C#语言基础1的主要内容,如果未能解决你的问题,请参考以下文章

如鹏网.Net三层架构第二章登录和会员管理

如鹏网学习笔记面向对象基础

如鹏网.Net三层架构 第四章代码生成器

如鹏网学习笔记MySql基础

如鹏网学习笔记JavaScript

如鹏网学习笔记.Net常用类库