C#基础知识点总结(一)-变量常量数据类型程序流枚举预处理器指令编程准则

目录

1. 变量常量

1.1 变量

1.2 常量

2. 预定义数据类型

2.1 值类型和引用类型

2.1.1 值类型

2.1.2 引用类型

2.2 .Net类型

2.3 预定义的值类型

2.3.1 整数

2.3.2 浮点类型

2.3.3 布尔类型

2.3.4字符类型

2.4 预定义的引用类型 

2.4.1 object类型

2.4.2 string类型

3. 程序流控制

3.1 条件语句

3.1.1  if

3.1.2 switch

3.2 循环

3.2.1 for

3.2.2 while

3.2.3 do...while

3.2.4 foreach

3.3 跳转语句

3.3.1 goto(大多数情况下不允许使用)

3.3.2 break

3.3.3 continue

3.3.4 return

4. 枚举

5.名称空间

6. Main()方法

7. C#预处理器指令

7.1 #define和#undef

7.2 #if、#elif、#else、#endif

7.3 #warning、#error

7.4 #region、#endregion

7.5 #line

7.6 #pragma

8. C#编程准则

1. 变量常量

1.1 变量

        1.变量必须在使用前初始化赋值

        2.创建变量是类或结构的字段,若没有显示初始化,则默认值为0

1.2 常量

        1.常量必须在声明时初始化,指定值后,不能再改

        const int a = 10; //总是隐式静态的,不允许常量声明中包含修饰符static

        2.常量的值必须能在编译时用于计算,不能从变量中提取的值来初始化常量

2. 预定义数据类型

2.1 值类型和引用类型

        值类型存储在堆栈上,引用类型存储在堆上,堆栈的执行效率大于堆的执行效率,堆栈的资源小于堆,不适合处理逻辑复杂大对象。

2.1.1 值类型

        1.直接存储值

        2.struct, bool, long等都为值类型

2.1.2 引用类型

        1.存储对值的引用

        2.大多复杂的数据类型,我们自己定义的类都为引用类型

2.2 .Net类型

数据类型的C#关键字(如int, short, string)从编译器映射到.Net数据类型。例如,在C#中声明一个int类型的数据是,声明的实际上是.Net结构System.Int32的一个实例。例如:

//类型实际上仍存储为基本类型,基本类型在概念上用.Net结构表示,所以肯定没有性能损失
string s = i.ToString();

2.3 预定义的值类型

内置的.Net值类型表示基本类型,有以下这些:

    byte, int, short, long 整型

    float, double 浮点类型

    char 字符类型

    bool 布尔类型

在C#中,所有数据类型都以与平台无关的方式定义。

2.3.1 整数

393ae71a38d54686ab191b847b72c6cd.jpeg

 示例代码:

//x为十六进制long值
long x = 0x12ab;

//对于uint,int,ulong,long无显示声明,默认都为int,long
uint uu = 123U;//无符号int
long ll = 1234L; //long
ulong ul = 1234UL; //无符号long

2.3.2 浮点类型

 decimal不是基本类型,在计算该类型时会有性能损失。

//指定数字为decimal类型,后缀为M
decimal d = 12.30M

ab56da469f3441fd8b23f613e9b0ec7a.jpeg

2.3.3 布尔类型

bool和整数值不能相互隐式转换,试图用0表示false,则报错。

2.3.4字符类型

char用单引号括起来(例如:'A')。

cae5616b4015405893c0458bc0444698.jpeg

2.4 预定义的引用类型 

C#支持两种引用类型:object(根类型,其他类型都是从它派生来的,包括值类型)和string(unicode字符串)

2.4.1 object类型

Object是最终的父类型,所有内置和用户定义的类型都从它派生而来。

2.4.2 string类型

字符串是不可改变的,修改其中一个字符串,就会创建一个全新的string对象,而另一个字符串不发生任何变化。

//字符串中不能出现未经转义的反斜杠字符
string path = "C:\\test.txt"; //必须为\\,如果是\则报错

string path = @"C:\text.txt"; //加@,则@后面的字符都看为原来的含义

string path =@"This is   
a apple";                     //允许在字符串字面量中包含换行符

Console.WriteLine($"s1 is {path}"); //在字符串前加上$,就允许把花括号放在包含一个变量或代码表达式的字符串中

3. 程序流控制

3.1 条件语句

3.1.1  if

测试特定条件是否满足。if字句中的表达式必须等于布尔值(Boolean)

3.1.2 switch

比较表达式和多个不同的值,从一组互斥的可执行分支中选择一个执行分支。

          //case值必须是常量表达式
            int parameters = 1;
            switch (parameters)
            {
                case 1:
                    Console.WriteLine("one");
                    break;
                case 2:
                    Console.WriteLine("two");
                    break;
                default:
                    Console.WriteLine("number");
                    break;
            }

注意:

1. case值必须是常量表达式,不允许使用变量

2. 任何两条case值都不能相同,包括值相同的不同常量

//eng和bri就是值相同的不同变量,不可以这么写,case会报错
string country = "cn";
            const string eng = "uk";
            const string bri = "uk";
            switch(country)
            {
                case eng:
                case bri:  //case语句报错
                    Console.WriteLine("language");
                    break;
            }

3.2 循环

3.2.1 for

for循环在执行下一次迭代前,测试是否满足某个条件,适用于一个语句或者语句块重复执行预定的次数。在每次迭代外部循环时,内部循环都要彻底执行完毕

            for(int i = 0; i <= 10; i++)
            {
                Console.WriteLine(i);
            }

3.2.2 while

适用于在循环开始前,不知道重复执行一个语句或语句块的次数。

//只要con这个条件为真,它会重复执行一个目标语句,直到con为false时,它才走紧挨着while语句的下一条语句           
 while (con)
{
     Console.WriteLine("hello");
}

3.2.3 do...while

适用于循环体至少执行一次的情况

          //Console.WriteLine("WORLD");会执行一次,然后while判断con值是否为true,为true则执行do循环体中的语句,为false,则跳出循环,执行下一条语句
          do
            {
                Console.WriteLine("WORLD");
            } while (con)

3.2.4 foreach

可以迭代集合中的每一项。不能改变集合中各项的值

//item的值不能在foreach循环中改变
foreach(var item in list)
{
    Console.WriteLine("FOREACH");
}

3.3 跳转语句

3.3.1 goto(大多数情况下不允许使用)

可以直接跳转到程序中用标签指定的另一行,不能跳转到像for循环的代码块中,不能跳出类的范围,不能退出try...catch块后面的finally块

goto Label:
Console.WriteLine("One");
Label:
Console.WriteLine("One");

3.3.2 break

用于退出for, foreach, while, do... while,switch中的case语句,该语句会控制流执行循环后面的语句。break放在switch语句或者循环外部,会产生编译错误。

3.3.3 continue

用于退出for, foreach, while, do... while,退出循环的当前迭代,开始执行循环的下一次迭代,而不是退出循坏


List<string> list = new List<string>();
foreach(var item in list)
{
    if(item.Contains("A"))
    {
//退出当前item,进行下一个item遍历
        continue;
    }
}

3.3.4 return

用于退出类的方法。把控制权返回方法的调用者。方法有返回类型,则return必须返回这个类型的值,如果是void,应使用没有表达式的return语句。

        public int NumFun()
        {
            int i = 0;
            return i;
        }

        public void StringFun()
        {
            return;
        }

4. 枚举

枚举是用户定义的整数类型(值类型),在语法上把枚举当成结构不会造成性能损失,实际上,代码一旦编译好,枚举就成为基本类型。使用枚举的代码易于维护, 代码清晰,易于输入。

    public enum TimeOfDay
    {
        Morning = 0,
        Afternoon = 1,
        Evening = 2
    }

        //会返回Afternoon字符串
        TimeOfDay time = TimeOfDay.Afternoon;

        //从字符串中获取枚举值
        //将其从字符串转为数字,要用Enum.Parse()方法
        TimeOfDay time2 = (TimeOfDay)Enum.Parse(typeof(TimeOfDay), "afternoon", true);

5.名称空间

1. 名称空间提供了一种组织相关类和其他类型的方式。不允许声明嵌套在另一个名称空间中的多部分名称空间,名称空间与程序集无关,同一个程序集中可以有不同的名称空间,也可以在不同的程序集中定义同一个名称空间中的类型。

2. using语句用来引用名称空间中的类型

6. Main()方法

C#程序是从Main()方法开始运行的,它使用了static修饰符,在任意类中,返回Int或者void类型,给它指定什么访问级别不重要,把它标记为private,它也可以运行。

7. C#预处理器指令

使用预处理器可以禁止编译器编译代码的某一部分,也可以禁止编译器编译与附加功能相关的代码。

预处理器指令的开头都有符号#

7.1 #define和#undef

必须把#define和#undef命令放在C#源文件的开头位置,在声明要编译的任何对象的代码之前。#define本身没什么用,但是与#if结合使用时,功能强大

//告诉编译器存在给定名称的符号DEBUG,类似声明一个变量,但是这个变量并没有真正的值
//若DEBUG符号已经存在,#define不起作用
#define DEBUG

//删除DEBUG符号的定义,若符号DEBUG不存在,则#undef没有任何作用
#undef DEBUG

7.2 #if、#elif、#else、#endif

//这段代码只有在前面有#define DEBUG才执行
#if DEBUG
            Console.WriteLine("DEBUG");
#endif

#elif(= else if)和#else指令可以用在#if块中

7.3 #warning、#error

7.4 #region、#endregion

7.5 #line

7.6 #pragma

8. C#编程准则

1. 标识符区分大小写

2. 标识符以字母或下划线开头

3. 不能把C#关键字用作标识符

4.名称使用Pascal大小写首字母大写:EmploySalary(一般用作方法,类名等命名)

camel大小写形式:employSalary(一般用作字段命名)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值