【C#】知识点速通

前言
笔者是跟着哔站课程(Trigger)学习unity才去学习的C#,并且C语言功底尚存,所以只是简单地跟着课程将unity所用的C#语言的关键部分进行了了解,然后在后期unity学习过程中加以深度学习。如需完善的C#知识,推荐CSDN博主:呆呆敲代码的小Y - 链接: link


具体学习部分如下,建议将后面的源代码复制到vs打开后按顺序查看,其中EP标注的是笔者的课程集数

需要用到哪个部分取消该部分定义及Main语句里的注释即可,部分内容有所串通,不使用时重新注释,防止调试时出现问题

所有内容只需要简单搜索就可以找到解释

其中比较重要的部分是public,static等的理解,以及父子集的运用,推荐还是跟着课程学习为好
在这里插入图片描述
#region 和 #endregion 是用来分区的,便于找到所需部分,不用该部分时,可以点击 #region 左边的箭头进行缩略
在这里插入图片描述

在这里插入图片描述

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml.Serialization;



//快捷键
//Tab                 一键补齐
//cw+Tab              Console.WriteLine的快速输入
namespace c__Project_3_28
{
    internal class Program
    {
       
        #region EP6 函数
        static void RecoverPlayerHP()
        {
            Console.WriteLine("玩家血量回复了");
        }

        static int Add()
        {
            int a = 1 + 1;
            return a;
        }
        #endregion

        #region EP7 结构体
        public struct Role
        {
            public string name;
            public int level;
            public int HP;
        }
        #endregion

        #region EP7 枚举
        public enum OCCUPATION
        {
            WARRIOR,//战士
            MASTER,//法师
            SHOOTER,//射手
            ASSASSIN,//刺客
            ASSIST//辅助
        }
        #endregion

        #region EP8 面向对象、类
        public class Bussinessman
        {
            private string name;
            public int money;
            public int goods;

            public Bussinessman()
            {

            }
            
            public Bussinessman(string bName, int bMoney, int bGoods)
            {
                name = bName;
                money = bMoney;
                goods = bGoods;
                Console.WriteLine("当前商人的名字是:" + name);
            }
            public void SetName(string bName,int bMoney,int bGoods)
            {
                name = bName;
                money = bMoney;
                goods = bGoods;
                Console.WriteLine("当前商人的名字是:" + name);
            }

            
            public void Buygoods(string otherName)
            {
                Console.WriteLine("当前" + name + "买了" + otherName + "的东西");
                money--;
                Console.WriteLine("当前" + name + "还剩" + money+"枚金币");
            }
            public void Sellgoods()
            {
                Console.WriteLine();
            }




        }
        #endregion

        #region EP10 继承
        public class Monster
        {
            public string name;
            public int hp;
            public virtual void Attack()
            {
                //this.hp--;
                Console.WriteLine("普通攻击");
            }
        }

        public class Boss : Monster
        {
            public override void Attack()
            {
                base.Attack();
                Console.WriteLine("放技能");
            }
        }
        #endregion

        #region EP11 属性
        public class Trigger
        {
            private int money;

            //ctrl+r -> ctrl+e  -  自动生成
            //public int Money { get => money; private set => money = value; }

            public int Money
            {
                get { return money; }//可访问但不可修改
                set { money = value; }//更改值,但加上 private 就仅在内部
                //value 引用客户端代码尝试分配给属性的值
            }

            private void SendMoney()
            {
                Money--;
            }
        }
        #endregion

        #region EP11 接口
        public class Drink //:IAddSuger
        {
            //public void AddSuger()
            //{

            //}
        }
        public class Milk : Drink, IAddSuger//一旦使用接口,必须调用
        {
            public int cost;//用在数组
            public void AddSuger()
            {

            }
        }
        public class Coffee : Drink, IAddSuger
        {
            public void AddSuger()
            {

            }
        }
        public class soup : Drink, IAddSuger, IAddSalt
        {
            public void AddSuger()
            {

            }
            public void AddSalt()
            {

            }
        }
        public interface IAddSuger//接口一般是public类型
        {
            void AddSuger();//接口内部默认public类型,不需要额外添加
        }
        public interface IAddSalt
        {
            void AddSalt();
        }
        #endregion

        #region EP12 数据类型
        #region EP12 数组
        static int[] nums;
        static string[] strs;

        #endregion

        #region EP12 列表
        static List<int> numlist;
        private static string name;
        #endregion

        #region EP12 栈

        #endregion

        #region EP12 队列

        #endregion

        #region EP12 字典

        #endregion
        #endregion

        #region EP13 静态与非静态
        public class Tool1
        {
            public int toolNum;
            public void StartGame()//非静态化
            {

            }
        }

        public class Tool2
        {
            public static int toolNum;
            public static void StartGame()//静态化
            {

            }
        }

        public class Person
        {

        }

        #endregion

        #region EP13 设计模式
        public class GameManager
        {
            public bool gameOver;
            //布尔值默认 false

            public static GameManager instance{get;set;}//instance是变量名
        }
        public class GameMusic
        {
            public GameManager gameManager;
            public void PlayMusic()
            {
                //if(!gameManager.gameOver)
                //{
                //    Console.WriteLine("正常播放游戏音乐");
                //}
                //else
                //{
                //    Console.WriteLine("退出游戏");
                //}

                if(!GameManager.instance.gameOver)
                {
                    Console.WriteLine("正常播放游戏音乐");
                }
            }
        }
        public class GameController
        {
            public GameManager gameManager;
            public void PerformGameLogic()
            {
                //if(!gameManager.gameOver)
                //{
                //    Console.WriteLine("正常执行游戏逻辑");
                //}
                //else
                //{
                //    Console.WriteLine("退出游戏");
                //}

                if (!GameManager.instance.gameOver)
                {
                    Console.WriteLine("正常执行游戏逻辑");
                }

            }
        }

        #endregion


        #region Main
        static void Main(string[] args)
        {
            #region EP7 结构体
            //Role role1;
            //role1.name = "xiaoyan";
            //role1.level = 1;
            //role1.HP = 10;

            //Role role2;
            //role2.name = "wanglong";
            //role2.level = 2;
            //role2.HP = 20;

            #endregion

            #region EP7 枚举
            //OCCUPATION hero1 = OCCUPATION.WARRIOR;
            #endregion

            #region EP8 面向对象、类
            //Bussinessman xiaoming = new Bussinessman();
            //xiaoming.Buygoods();
            //xiaoming.goods = 10;

            //Bussinessman bussinessman1 = new Bussinessman();
            //bussinessman1.SetName("小明", 100, 10);
            //Bussinessman bussinessman2 = new Bussinessman();
            //bussinessman2.SetName("小红", 1000, 100);
            //bussinessman1.Buygoods("小红");

            #endregion

            #region EP10 继承
            //Monster monster = new Monster();
            //monster.hp = 100;
            //Boss boss = new Boss();
            //boss.hp = 100;
            //monster.Attack();
            //boss.Attack();

            //Monster monster = new Boss();//父类声明子类实例化 - 行
            //monster.Attack();
            //Boss boss = new Monster();//子类声明父类实例化 - 不行

            //Monster monster = null;//未将对象引用到设置实例 - 错误
            //monster.Attack();


            #endregion

            #region EP11 属性
            //Trigger tri = new Trigger();
            //Console.WriteLine(tri.Money);
            #endregion

            #region EP11 接口
            //Milk milk = new Milk();

            //IAddSuger drink = new Drink();//当父类对应接口时可实现
            //drink.AddSuger();
            #endregion

            #region EP12 数据类型

            #region EP12 数组 
            //nums = new int[] { 1, 3, 5, 7, 9 };//数组长度在初始化时已经固定
            //Console.WriteLine(nums[0]);
            //Console.WriteLine(nums[3]);

            //Console.WriteLine(nums.Length);//Length - 计算数组长度

            //nums = new int[2];//会产生覆盖
            //nums[0] = 1;
            //nums[1] = 2;
            //Console.WriteLine(nums[1]);

            遍历
            //for (int i = 0; i < nums.Length; i++)
            //{
            //    Console.WriteLine(nums[i]);
            //}


            //strs = new string[] { "s", "JohnKi" };
            //Console.WriteLine(strs[1]);

            //Milk[] milks = new Milk[]
            //{
            //    new Milk(){cost = 10},
            //    new Milk()
            //};

            #endregion

            #region EP12 列表
            //numlist = new List<int>();
            //numlist.Add(3);//Add - 加入到列表的方法名
            //numlist.Add(9);
            //numlist.Add(7);

            //Console.WriteLine(numlist[1]);//3

            //Console.WriteLine(numlist.Count);//3
            //numlist.Remove(9);//Remove - 移除哪一个元素
            //Console.WriteLine(numlist.Count);//2

            //numlist.RemoveAt(0);//RemoveAt - 移除哪一个下标的元素
            //Console.WriteLine(numlist.Count);//1
            //Console.WriteLine(numlist[0]);//7

            //numlist.Clear();//Clear - 全屏清空
            //Console.WriteLine(numlist.Count);//0

            //List<Monster> monstersList = new List<Monster>()//Monster 自定义类型(继承)
            //{
            //    new Monster() { },
            //    new Monster() { }
            //};
            //Console.WriteLine(monstersList.Count);//2

            #endregion

            #region EP12 栈
            //新进后出
            //Stack<Trigger> triggerStack = new Stack<Trigger>();//Trigger - 来自属性
            //triggerStack.Push(new Trigger() { Money = 10});//Push - 压栈
            //triggerStack.Push(new Trigger() { Money = 1});
            //Console.WriteLine(triggerStack.Count);//2

            //Trigger t = triggerStack.Pop();//Pop - 弹出
            //Console.WriteLine(t.Money);//1
            //Console.WriteLine(triggerStack.Count);//1

            #endregion

            #region EP12 队列
            //Queue<int> numsQueue = new Queue<int>();
            //numsQueue.Enqueue(1);//入队
            //numsQueue.Enqueue(2);

            //Console.WriteLine(numsQueue.Count);//队列长度

            //int n = numsQueue.Dequeue();//出队
            //Console.WriteLine(n);

            #endregion

            #region EP12 字典
            键、值  -  键值对
            键和值可以为任意类型,只需一一对应
            //Dictionary<int, Monster> monsterDict1 = new Dictionary<int, Monster>();
            键为整形,值为自定义类型Monster
            //monsterDict1.Add(1, new Monster() { name = "李白" });//添加字典键和值
            //monsterDict1.Add(2, new Monster() { name = "貂蝉" });
            //Console.WriteLine(monsterDict1[1].name);

            //Dictionary<string, Monster> monsterDict2 = new Dictionary<string, Monster>();
            键为字符型,值为自定义类型Monster
            //monsterDict2.Add("李白", new Monster() { hp = 100 });
            //monsterDict2.Add("貂蝉", new Monster() { hp = 80 });
            //Console.WriteLine(monsterDict2["貂蝉"].hp);

            遍历
            //foreach (var item in monsterDict2)
            //{
            //    Console.WriteLine(item.Key);//键
            //}
            //foreach (var item in monsterDict2)
            //{
            //    Console.WriteLine(item.Value);//值
            //}
            //foreach (var item in monsterDict2)
            //{
            //    Console.WriteLine(item.Value.hp);//值
            //}


            #endregion

            #endregion

            #region EP13 静态与非静态
            当StartGame没有设置为全局变量时,通过创建的变量名调用
            //Tool1 tool1 = new Tool1();
            //tool1.StartGame();
            //Console.WriteLine(tool1.toolNum);

            当StartGame设置为全局变量时,直接通过类型名调用
            //Tool2.StartGame();
            //Console.WriteLine(Tool2.toolNum);

            #endregion

            #region EP13 设计模式
            GameManager gameManager = new GameManager();

            GameMusic gameMusic = new GameMusic();
            gameMusic.gameManager = gameManager;

            GameController gameController = new GameController();
            gameController.gameManager = gameManager;

            //gameManager.gameOver = false;

            GameManager.instance = new GameManager();
            GameManager.instance.gameOver = false;

            gameMusic.PlayMusic();
            gameController.PerformGameLogic();

            #endregion


            Console.ReadKey();
        }
        #endregion

    }
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/503298.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 后端 Flask 使用 Flask-SocketIO、前端 Vue3 实现长连接 Websocket 通信详细教程(更新中)

Flask 安装 Flask-Socketio Flask-SocketIO 第三方库使 Flask 应用程序可以实现客户端和服务器之间的低延迟双向通信。客户端应用程序可以使用 Javascript、Python、C、Java 和 Swift 中的任何 SocketIO 客户端库或任何其他兼容客户端来建立与服务器的永久连接。 Flask-Socke…

编程语言|C语言——C语言操作符的详细解释

这篇文章主要详细介绍了C语言的操作符&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值&#xff0c;需要的朋友们下面随着小编来一起学习学习吧 一、基础 1.1 算数操作符 - * / % - * / 这些操作符是我们…

【Redis】Redis 生产问题。如何确保缓存和数据库数据的一致性? 常见的缓存更新策略?

目录 缓存穿透 缓存穿透解决办法 缓存击穿 击穿解决办法&#xff1f; 缓存穿透和缓存击穿的区别&#xff1f; 缓存雪崩 雪崩解决办法&#xff1f; 如何确保缓存和数据库数据的一致性&#xff1f; 常见的缓存更新策略&#xff1f; 缓存穿透 定义&#xff1a;缓存穿透说…

[BT]BUUCTF刷题第11天(3.30)

第11天 Web&#xff08;共3题&#xff09; [网鼎杯 2018]Fakebook 打开是一个注册登录页面&#xff0c;包括用户、年龄和博客地址 查看题解知道存在robots.txt 访问http://c1392d44-63c3-4152-bf7e-89513eff1152.node5.buuoj.cn:81/robots.txt&#xff1a; User-agent: * D…

解决MySQL幻读?可重复读隔离级别背后的工作原理

什么是当前读和快照读 当前读&#xff1a;又称为 "锁定读"&#xff0c;它会读取记录的最新版本&#xff08;也就是最新的提交结果&#xff09;&#xff0c;并对读取到的数据加锁&#xff0c;其它事务不能修改这些数据&#xff0c;直到当前事务提交或回滚。"sele…

python统计分析——灵敏度、特异度和ROC曲线

参考资料&#xff1a;python统计分析【托马斯】 1、灵敏度和特异度 灵敏度&#xff1a;也叫作效能。被检验正确识别出来的阳性结果&#xff08;病人中有疾病且检验结果是阳性的概率&#xff09;。 特异度&#xff1a;被检验正确识别出来的阴性结果&#xff08;病人健康且检验结…

mysqldump备份数据库提示ERROR 1064 (42000): You have an error in your SQL syntax

在dos下备份数据库的时候提示上面的错误信息 1 错误详情 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near mysql-v at line 1错误示例图 2 解决办法 通过查资料…

vue2.0脚手架搭建

vue起步 文档 https://v2.cn.vuejs.org/ {{}} 变量、表达式渲染v-html html模板&#xff0c;渲染htmlv-model 绑定值&#xff08;双向绑定&#xff09;v-if 判断v-bind&#xff1a;href"地址" 简写&#xff1a;绑定属性 简写&#xff1a;href&#xff1a;"&qu…

OpenKylin安装Kafka

一、操作系统 openKylin 1.0.1 X86 二、下载安装包 # 安装依赖jdk sudo apt-get update sudo apt-get install default-jdk # 下载kafka mkdir -p /data/software/kafka wget https://archive.apache.org/dist/kafka/2.4.1/kafka_2.13-2.4.1.tgz三、解压安装 # 解压缩Kafka…

腾讯云2核2G服务器优惠价格,61元一年

腾讯云2核2G服务器多少钱一年&#xff1f;轻量服务器61元一年&#xff0c;CVM 2核2G S5服务器313.2元15个月&#xff0c;轻量2核2G3M带宽、40系统盘&#xff0c;云服务器CVM S5实例是2核2G、50G系统盘。腾讯云2核2G服务器优惠活动 txybk.com/go/txy 链接打开如下图&#xff1a;…

【2023】kafka入门学习与使用(kafka-2)

目录&#x1f4bb; 一、基本介绍1、产生背景2、 消息队列介绍2.1、消息队列的本质作用2.2、消息队列的使用场景2.3、消息队列的两种模式2.4、消息队列选型&#xff1a; 二、kafka组件1、核心组件概念2、架构3、基本使用3.1、消费消息3.2、单播和多播消息的实现 4、主题和分区4.…

TypeScript编译器tsc的入门指南

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

货物摆放例题——(求n的所有因子+foreach循环+set集合应用)

这里写目录标题 例题引入题目分析解题方法1.暴力求解2.求n的所有的因子foreach循环 3.利用 set集合 参考文章 例题引入 题目分析 - n个都是 V1 的小正方体---》去拼成一个大的长方体---》满足nLWH - 也就是&#xff0c;在小于等于n的所有数中&#xff0c;任取3个数&#xff08…

vitess执行计划缓存 测试

打开执行计划器缓存&#xff1a; sysbench /usr/local/share/sysbench/oltp_write_only.lua --mysql-host127.0.0.1 --mysql-port15306 --mysql-userroot --mysql-password --mysql-dbcustomer --report-interval10 100s sysbench /usr/local/share/sysbench/oltp_read_only.l…

前端三剑客 —— HTML (上)

前端 前端是什么&#xff1f; 把我们的数据以各种方式&#xff08;如&#xff1a;表格、饼图、柱状图等&#xff09;呈现给用户&#xff0c;我们就可以称之为前端。 做前端需要的工具&#xff1f; notepad、editplus、notepad、VS code、webstorm等&#xff0c;一般用于前端开…

嵌入式硬件中常见的面试问题与实现

1 01 请列举您知道的电阻、电容、电感品牌(最好包括国内、国外品牌) ▶电阻 美国:AVX、VISHAY威世 日本:KOA兴亚、Kyocera京瓷、muRata村田、Panasonic松下、ROHM罗姆、susumu、TDK 台湾:LIZ丽智、PHYCOM飞元、RALEC旺诠、ROYALOHM厚生、SUPEROHM美隆、TA-I大毅、TMT…

数据结构 - 算法效率|时间复杂度|空间复杂度

目录 1.算法效率 2.时间复杂度 2.1定义 2.2大O渐近表示法 2.3常见时间复杂度计算举例 3.空间复杂度 3.1定义 3.2常见空间复杂度计算举例 1.算法效率 算法的效率常用算法复杂度来衡量&#xff0c;算法复杂度描述了算法在输入数据规模变化时&#xff0c;其运行时间和空间…

路径规划——搜索算法详解(五):Dynamic A Star(D*)算法详解与Matlab代码

昨天休息了一天&#xff0c;今天继续学习搜索算法&#xff01;前几天已经分别介绍了Dijkstra算法、Floyd算法、RRT算法、A*算法&#xff0c;无独有偶&#xff0c;上述算法都只适用于静态环境下两点规划的场景&#xff0c;但是大部分场景是实时变化的&#xff0c;这对规划算法提…

阿里云4核8G服务器ECS u1实例租用优惠价格955元一年

阿里云4核8G服务器优惠价格955元一年&#xff0c;配置为ECS通用算力型u1实例&#xff08;ecs.u1-c1m2.xlarge&#xff09;4核8G配置、1M到3M带宽可选、ESSD Entry系统盘20G到40G可选&#xff0c;CPU采用Intel(R) Xeon(R) Platinum处理器&#xff0c;阿里云活动链接 aliyunfuwuq…

手写红黑树【数据结构】

手写红黑树【数据结构】 前言版权推荐手写红黑树一、理论知识红黑树的特征增加删除 二、手写代码初始-树结点初始-红黑树初始-遍历初始-判断红黑树是否有效查找增加-1.父为黑&#xff0c;直接插入增加-2. 父叔为红&#xff0c;颜色调换增加-3. 父红叔黑&#xff0c;颜色调换&am…