【C#】知识点速通

news2024/11/24 13:09:02

前言
笔者是跟着哔站课程(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

    }
}


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JDBC远程连接mysql报错:NotBefore: Sat Mar 30 16:37:41 UTC 2024

虚拟机docker已经部署了mysql&#xff0c;用navicat可以直接远程连接&#xff0c;datagrip却不能&#xff0c;如图&#xff1a; 需要在最后加上 ?useSSLfalse , 如&#xff1a;jdbc:mysql://192.168.30.128:3306?useSSLfalse navicat不用加的原因是没有使用jdbc连接&#x…

实验二 pandas库绘图以及数据清洗

1.1pandas验证操作 1、验证以下代码&#xff0c;并将结果附截图 import pandas as pd A[1,3,6,4,9,10,15] weight[67,66,83,68,79,88] sex[女,男,男,女,男, 男] S1pd.Series(A)#构建S1序列 print(S1) S2pd.Series(weight)#构建S2序列 print(S2) S3pd.Series(sex)#构建S3序列 p…

第3章.引导ChatGPT精准角色扮演:高效输出专业内容

角色提示技术 角色提示技术&#xff08;role prompting technique&#xff09;&#xff0c;是通过模型扮演特定角色来产出文本的一种方法。用户为模型设定一个明确的角色&#xff0c;它就能更精准地生成符合特定上下文或听众需求的内容。 比如&#xff0c;想生成客户服务的回复…

STM32的DMA

DMA(Direct memory access)直接存储器存取,用来提供在外设和存储器之间或者存储 器和存储器之间的高速数据传输&#xff0c;无须CPU干预&#xff0c;数据可以通过DMA快速地移动&#xff0c;这就节 省了CPU的资源来做其他操作。 STM32有两个DMA控制器共12个通道(DMA1有7个通道…

(八)目标跟踪中参数估计(似然、贝叶斯估计)理论知识

目录 前言 一、统计学基础知识 &#xff08;一&#xff09;随机变量 &#xff08;二&#xff09;全概率公式 &#xff08;三&#xff09;高斯分布及其性质 二、似然是什么&#xff1f; &#xff08;一&#xff09;概率和似然 &#xff08;二&#xff09;极大似然估计 …

Linux内核之Binder驱动container_of进阶用法(三十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

EasyRecovery2024汉化精简版,无需注册

EasyRecovery2024是世界著名数据恢复公司 Ontrack 的技术杰作&#xff0c;它是一个威力非常强大的硬盘数据恢复软件。能够帮你恢复丢失的数据以及重建文件系统。 EasyRecovery不会向你的原始驱动器写入任何东东&#xff0c;它主要是在内存中重建文件分区表使数据能够安全地传输…

ctfshow web入门 XXE

XXE基础知识 XXE&#xff08;XML External Entity&#xff09;攻击是一种针对XML处理漏洞的网络安全攻击手段。攻击者利用应用程序在解析XML输入时的漏洞&#xff0c;构造恶意的XML数据&#xff0c;进而实现各种恶意目的。 所以要学习xxe就需要了解xml xml相关&#xff1a; …

Chrome浏览器 安装Vue插件vue-devtools

前言 vue-devtools 是一个为 Vue.js 开发者设计的 Chrome 插件。它可以让你更轻松地审查和调试 Vue 应用程序。与普通的浏览器控制台工具不同&#xff0c;Vue.js devtools 专为 Vue 的响应性数据和组件结构量身定做。 1. 功能介绍 组件树浏览&#xff1a;这个功能可以让你查…

使用Python实现ID3决策树中特征选择的先后顺序,字节跳动面试真题

def empty1(pri_data): hair [] #[‘长’, ‘短’, ‘短’, ‘长’, ‘短’, ‘短’, ‘长’, ‘长’] voice [] #[‘粗’, ‘粗’, ‘粗’, ‘细’, ‘细’, ‘粗’, ‘粗’, ‘粗’] sex [] #[‘男’, ‘男’, ‘男’, ‘女’, ‘女’, ‘女’, ‘女’, ‘女’] for o…

OpenHarmony error: signature verification failed due to not trusted app source

问题&#xff1a;error: signature verification failed due to not trusted app source 今天在做OpenHarmony App开发&#xff0c;之前一直用的设备A在测试开效果&#xff0c;今天换成了设备B&#xff0c;通过DevEco Studio安装应用程序的时候&#xff0c;就出现错误&#xf…

爱上数据结构:栈和队列的概念及使用

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;数据结构 ​ 一、栈 1.栈的基本概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶&#xff0c;…

不同Python版本和wxPython版本用pyinstaller打包文件大小对比

1、确定wxPython和Python版本的对应关系 在这里可以找到Python支持的所有wxPython版本&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple/wxpython/ 由于Python从3.6版本开始支持f字符串、从3.9版本开始不支持Windows7操作系统&#xff0c;所以我仅筛选3.6-3.8之间的版本…

qupath再度更新:使用WSInfer进行深度学习

Open and reusable deep learning for pathology with WSInfer and QuPath Open and reusable deep learning for pathology with WSInfer and QuPath | npj Precision Oncology (nature.com) 以前&#xff1a;数字病理图像分析的开源软件qupath学习 ①-CSDN博客 背景 深度学…

HarmonyOS实战开发-如何实现一个自定义抽奖圆形转盘

介绍 本篇Codelab是基于画布组件、显式动画&#xff0c;实现的一个自定义抽奖圆形转盘。包含如下功能&#xff1a; 通过画布组件Canvas&#xff0c;画出抽奖圆形转盘。通过显式动画启动抽奖功能。通过自定义弹窗弹出抽中的奖品。 相关概念 Stack组件&#xff1a;堆叠容器&am…

统计XML文件内标签的种类和其数量及将xml格式转换为yolov5所需的txt格式

1、统计XML文件内标签的种类和其数量 对于自己标注的数据集&#xff0c;需在标注完成后需要对标注好的XML文件校验&#xff0c;下面是代码&#xff0c;只需将SrcDir换成需要统计的xml的文件夹即可。 import os from tqdm import tqdm import xml.dom.minidomdef ReadXml(File…

Day62-Nginx四层负载均衡及结合7层负载均衡实践

Day62-Nginx四层负载均衡及结合7层负载均衡实践 1. 什么是四层负载均衡&#xff1f;2. 四层负载均衡的常用场景3. 百万并发百亿PV大规模架构4. L4和L7的区别及常用软件。5. lvs、nginx、haproxy区别6. nginx四层负载均衡&#xff08;tcp/ip&#xff0c;ip:port&#xff09;7. n…

python多方式操作elasticsearch介绍

python多方式操作elasticsearch介绍 1. requests模块操作ES ​ requests 是一个 Python HTTP 库&#xff0c;它简化了发送 HTTP 请求和处理响应的过程。通过 requests 模块&#xff0c;开发人员可以轻松地与 Web 服务进行通信&#xff0c;包括获取网页内容、执行 API 请求等。…

JavaScript(一)---【js的两种导入方式、全局作用域、函数作用域、块作用域】

一.JavaScript介绍 1.1什么是JavaScript JavaScript简称“js”&#xff0c;js与java没有任何关系。 js是一种“轻量级、解释型、面向对象的脚本语言”。 二.JavaScript的两种导入方式 2.1内联式 在HTML文档中使用<script>标签直接引用。 <script>console.log…

跨越时空,启迪智慧:奇趣相机重塑儿童摄影与教育体验

【科技观察】近期&#xff0c;奇趣未来公司以其创新之作——“奇趣相机”微信小程序&#xff0c;强势进军儿童AI摄影市场。这款专为亚洲儿童量身定制的应用&#xff0c;凭借精准贴合亚洲儿童面部特征的AIGC大模型&#xff0c;以及丰富的摄影模板与场景设定&#xff0c;正在重新…