C#LearnNote


1.【基础要点】


  1. 变量在使用前必须赋值
  2. 转义符
    空字符 \0
    回车换行 \r\n
    Tap \t
  3. Console.ReadLine()只录入string类型
string gunName = Console.ReadLine()
  1. 源代码(.cs)——CLS编译——中间语言(exe)——CLR编译——机器码0 1
    目的:【跨语言】 目的:【优化 跨平台】
    CLS:公共语言规范 CLR:s公共语言运行库
  2. 将内容缩小
#region 注释
内容
#endregion
  1. 随机数
// 放在方法外,类内
static Random random = new Random();		
         int number = random.Next(1, 101);
//【可取下限,不可取上限,左等又不等,1~100】
         Console.WriteLine(number);
  1. 自动补全 --> for/while/do + 两下Tab
  2. Write和WriteLine的区别
//在一行显示
Console.Write("a");
//显示后换行
Console.WriteLine("a");
  1. 方法注释
  /// <summary>
        /// 加法运算
        /// </summary>
        /// <param name="number01">加数a</param>
        /// <param name="number02">加数b</param>
        /// <returns></returns>
        private static int AddNumber(int number01,int number02)
        {
            return (number01 + number02);
        } 
  1. 代码简洁,减少嵌套层数,代码是要给别人看的
  2. 选取方法名,按右键(或f12)转到定义,可以查看方法位置
  3. 重命名变量
    在这里插入图片描述
  4. var判断类型
    在这里插入图片描述
    Array 数组父类 声明父类赋值子类
    object 万类之祖 任意类型
  5. 形参传父类 实参传子类
  6. 加两个断点 F5直接进入到下一个断点 F11逐行运行
  7. TryParse方法
    在这里插入图片描述
  8. 垃圾回收器
    在这里插入图片描述

2.【基础格式】


using System;				//引入命名空间(Console在System里)
namespace ConsoleApp2		//定义命名空间【类的住址】
{
    class Program			//定义类【做工具】
    {
        static void Main(string[] args)		//定义方法【做功能】
        {
            Console.WriteLine("Hello World!");
            string a = Console.ReadLine();*
            Console.WriteLine("hello  "+a);
        }
    }
}

3.【快捷键】


  • 自动对齐快捷键:Ctrl + K + F
  • 调试
    (1)在可能出错的行加断点(开始地方)
    (2)F5 启动调试
    (3)F11 逐语句执行
    (4)shift + F5 停止调试
  • 补全语法 方法名+两下Tab

4.【占位符{}】


int b = 20;
         string a ="adc";
         Console.WriteLine("This is {0},This is {1}",a,b);//(一般)
/*
【重要】
※ string b = string.Format("This is {0}", a);
【数字字符串格式化】
{0:d2}	->	05
{0:c}	->	羊10.00		{0:p}	->	10.00%
*/

5.【数据类型】


  • (1)整形 【int】
    sbyte byte
    short
    int uint
    long ulong

  • (2)非整形 【float】 【浮点型要加后缀,a = 0.1f】
    float f 【无法准确表示1/10,要用decimal】
    double d
    decimal m

  • (3)非数值型
    char
    string
    bool


6.【数据类型转换】


  • (1)string --> 其他
    Parse转换】 【类型.Parse(string变量)】
string a = "18";
int b = int.Parse(a);
Console.WriteLine(b+1);
  • (2)其他 --> string
    ToString转换】 【变量.ToString()】
int a = 18;
string b = a.ToString();
Console.WriteLine(b + "years");
  • (3)隐式转换 小范围->大范围
byte b3 = 100;
int i3 = b3;
  • (4)显示转换 大范围->小范围 【(转换类型)变量】
int i4 =300;
byte b4 = (byte)i4;

7.【语句结构】


  • (1)【选择结构】
1)【ifif(条件){
	语句
}
else if(条件){
	语句
}
else{
	语句
}2)【switch】【不能判断float类型】
switch(变量){
	case 常数1:
		语句;
		breakdefault
		语句;
		break}
多个case执行同一语句
	case 常数1case 常数2case 常数3:
	语句;
	break
  • (2)【循环结构】
    for适合知道运行多少次】for(初始化;循环条件;增减变量){
    循环体
    }
    continue 结束本次循环,继续下次循环】
    while适合达到一定条件(不知道要运行多少次)】
    do while
do{
	循环体
}while(判断条件)

8.【短路逻辑】


在这里插入图片描述
在这里插入图片描述


9.【定义方法(函数)】【实现一个功能】


定义方法:                       【方法名称首字母大写】
[访问修饰符][可选修饰符] 返回类型 方法名称(参数列表)
{
	//方法体
	return 结果;
}
private static int Plus(int a,int b)
{
    return (a + b);
}
调用方法:
方法名称(参数)
int sum = Plus(1,2); 		

10.【方法重载】


  • 定义:方法名称相同,参数列表不同
  • 作用:在不同的条件下,解决同一类问题,让调用者仅仅记住1个方法

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述


11.【递归】


方法内部又调用自身的过程

  • 优势:将复杂的问题简单化
  • 缺点:性能较差
  • 注意:堆栈溢出

12.【数组】


  • (1)声明和初始化
    在这里插入图片描述
  • (2)数组长度 a.Length
    在这里插入图片描述
  • 一键改数组名 选中变量 -> 右键重命名 -> 进行修改
    在这里插入图片描述
  • (3)方法返回数组 数据类型[] 方法名
    在这里插入图片描述
  • (4)初始值
    ①整形 0
    ②非整形 0.0
    ③char \0
    ④string null
    ⑤bool false
    在这里插入图片描述
  • (5)foreach 读取全部元素
    在这里插入图片描述
    在这里插入图片描述
  • (6)声明 父类类型 赋值 子类对象Array
    在这里插入图片描述
  • (7)object万类之祖
    在这里插入图片描述
  • (8)常用方法及属性
    在这里插入图片描述
    在这里插入图片描述
  • (9)交错数组
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • (10)参数数组 params
    在这里插入图片描述
  • 【当数组容量会改变时用集合】
    在这里插入图片描述

13.【2048核心算法】


上下移动对列操作,左右移动对行操作

  • 定义去零方法(针对一位数组):将0元素移到末尾
  • 合并数据方法(针对一位数组):
    -去零
    -相邻相同合并,将后一个加到前一个元素,后元素归零
    -去零
  • 上移
    -从上往下取列数据,形成一维数组
    -调用合并数据方法
    -将以为数组元素 还原至原列
  • 下移动
    -从下往上取列数据,形成一维数组
    -调用合并数据方法
    -将以为数组元素 还原至原列
  • 左移动
    -从左往右取行元素,形成一维数组
    -调用合并数据方法
    -将以为数组元素 还原至原行
    在这里插入图片描述
    在这里插入图片描述

14.【数据类型分类】


  • (1)值类型:存储数据本身 -> 占用空间较小的
    –声明在栈中,数据存储在栈中
  • (2)引用类型:存储数据的引用(内存地址) -> 占用空间较大的
    –声明在栈中,数据存储在堆中
  • 方法在栈中 --> 方法中声明的变量在栈中
    在这里插入图片描述
  • 内存: --CPU与其他外部存储器(硬盘)交换数据的桥梁
    –用于存储正在执行的程序与数据,数据必须加载到内 存才能被CPU处理
  • 分配:程序运行时,CLR将申请的内存空间从逻辑上进行划分
    –栈区
    -空间小,读取速度快
    -用于存储正在执行的方法,存储方法的参数以及变量等数据,方法执行完毕后,对应的栈帧(分配的空间)将被清除
    –堆区
    -空间大,读取速度慢
    -存储引用类型的数据
  • 局部变量
    –没有默认值,没有初始值不能使用
    –方法被调用时,存在栈中,方法调用结束时从栈中消除
    【以下都是局部变量的时候】
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

15.【参数】


  • 值参数 传递信息
  • 引用参数 改变数据
  • 输出参数(可以返回多个结果) 返回结果
    –方法内部必须赋值
    –传递进方法内部前可以不赋值
    在这里插入图片描述

16.【拆装箱】值类型 -> object -> 值类型


  • 【对数据性能消耗其实不大,只是面试必须要知道】
  • (1)装箱box
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • (2)拆箱 unbox
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • (3)避免拆装箱
    在这里插入图片描述
    在这里插入图片描述
  • 方法的参数尽量别写object
  • 赋值的时候避免拿值类型和字符串连接,建议ToString一下
  • (3)ILspy查看拆装箱次数
    -代码生成
    -打开软件,将exe文件拖拽到ILspy
    -找到对应代码部分,选择IL语言
    在这里插入图片描述

17.【String】


  • (1)字符串常量具备字符串池特性
    在这里插入图片描述
    目的:提高内存的利用率
    在这里插入图片描述
  • (2)字符串的不可变性
    【原因】如果字符串大于要替换的字符串,会导致内存泄漏
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 可变字符串StringBuilder
    - 用for和Tostring直接连接会产生大量的垃圾
    在这里插入图片描述
    在这里插入图片描述
    【优点】避免产生垃圾,可在原有空间修改字符串
    【适用性】频繁对字符串操作(增加 替换 移除)
    【缺点】如果范围超过预定值,会产生垃圾
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • (3)常用方法
    在这里插入图片描述
    在这里插入图片描述

18.【枚举】enum 增强代码可读性,限定取值


  • (1)简单枚举
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • (2)选择多个枚举值 | 【标准枚举】
    在这里插入图片描述
    在这里插入图片描述
  • (3)数据类型转换
    在这里插入图片描述

19.【类与对象】 类是一种数据类型【封装多个数据】


在这里插入图片描述

  • (1)类的组成
    ①数据成员
    ②方法成员
    在这里插入图片描述
  • (2)创建类
    在这里插入图片描述
    在这里插入图片描述
    this对象中的成员变量
  • (3)创建对象
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • (4)成员变量【类中方法外】
    -具有默认值
    -变量可以与局部变量重名
    -存在堆中,对象回收时,成员变量清除
    在这里插入图片描述
    在这里插入图片描述
  • (5)访问修饰符
    ①private 私有的
    ②public 公共的
  • (6)字段和属性
    【可对写入或读取进行限制】
    【可实现只读或只写】
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
  • (7)构造函数【创建对象的方式】【创建对象时自动调用】
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • (8)常用写法
    在这里插入图片描述
  • (9)自动属性
    prop + tab + tab
    在这里插入图片描述

20.【继承】


在这里插入图片描述
在这里插入图片描述

  • (1)选继承的原因
    1.有共同的成员(代码)(如图中的Name)
    2.概念上是统一的
    在这里插入图片描述
    Teacher中的Name和Student中的Name一样,可以使用继承
  • (2)语法
    class 子类名:父类名
    在这里插入图片描述
    在这里插入图片描述
  • (3)protected
    在这里插入图片描述
  • (4)【 类型 决定能调用什么】
    【父子类型 强转用 as】

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

21.【Static】


  • (1)静态成员变量
    在这里插入图片描述
    静态成员变量 属于
    实例成员变量 属于 对象
    特点:被所有对象共享(在静态区),常驻内存
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • (2)静态构造函数 【不能出现访问修饰符】

在这里插入图片描述
在这里插入图片描述

  • (3)静态方法 【不能访问实例成员】
    在这里插入图片描述
    在这里插入图片描述
  • (4)静态类 【不能被继承】
    在这里插入图片描述
  • (5)适用性
    在这里插入图片描述
    【工具类用静态类做,使用时直接类.方法就可以,不需要创建对象然后调用方法】

22.【二维数组方法】


在这里插入图片描述
在这里插入图片描述


23.【二维数组工具类】


在这里插入图片描述
在这里插入图片描述


24.【结构体】【值类型】


在这里插入图片描述
比如一个物体的位置,会经常发生改变
引用类型需要改变时,会产生垃圾
而值类型直接改数据,
提高性能
【不能直接用自动属性,除非在构造函数里面加:this()】
在这里插入图片描述
在这里插入图片描述


25.【2048核心类】


  • (1)把参数都去掉,提为成员变量,目的:避免每次移动,产生垃圾
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

26.【松散耦合MVC】


Model View Controller
数据
显示(界面代码)
逻辑控制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值