【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;//布尔值默认 falsepublic 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 Mainstatic 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();#endregionConsole.ReadKey();}#endregion}
}

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

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

相关文章

码支付个人支付宝永不掉线使用教程

​支付宝免CK添加操作稍微繁琐点&#xff0c;请耐心观看 此通道必须关闭你的余额宝自动转入功能&#xff0c;否则可能造成不跳转 支付宝添加的所有通道均支持H5免输入收款 第一步&#xff1a;打开支付宝开发平台&#xff0c;然后用你的支付宝注册登陆&#xff1a;https://op…

pytest中文使用文档----10skip和xfail标记

1. 跳过测试用例的执行 1.1. pytest.mark.skip装饰器1.2. pytest.skip方法1.3. pytest.mark.skipif装饰器1.4. pytest.importorskip方法1.5. 跳过测试类1.6. 跳过测试模块1.7. 跳过指定文件或目录1.8. 总结 2. 标记用例为预期失败的 2.1. 去使能xfail标记 3. 结合pytest.param方…

算法学习——LeetCode力扣动态规划篇5

算法学习——LeetCode力扣动态规划篇5 198. 打家劫舍 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统…

C语言如何进⾏函数的嵌套调⽤?

一、问题 C语⾔中不允许进⾏嵌套的函数定义&#xff0c;因此各函数之间是平⾏的&#xff0c;不存在上⼀级函数和下⼀级函数的问题。但是C语⾔允许在⼀个函数的定义中出现对另⼀个函数的调⽤&#xff0c;这就是函数嵌套调⽤。那么如何嵌套调⽤呢&#xff1f; 二、解答 函数的嵌…

python学习16:python中的布尔类型和条件语句的学习

python中的布尔类型和条件语句的学习 1.布尔&#xff08;bool&#xff09;类型的定义&#xff1a; 布尔类型的字面量&#xff1a;True表示真&#xff08;是、肯定&#xff09; False表示假&#xff08;否、否定&#xff09; True本质上是一个数字记作1&#xff0c;False记作0 …

遥感数字图像处理的学习笔记

相关链接&#xff1a; 遥感数字图像处理实验教程&#xff08;韦玉春&#xff09;--部分实验问题回答 目录 1.什么是图像&#xff0c;什么是数字图像&#xff1f; 2.什么是遥感数字图像&#xff1f;模拟图像(照片)与遥感数字图像有什么区别&#xff1f; 3.什么是遥感数字图像…

构建操作可靠的数据流系统

文章目录 前言数据流动遇到的困难先从简单开始可靠性延迟丢失 性能性能损失性能——分层重试 可扩展性总结 前言 在流式架构中&#xff0c;任何对非功能性需求的漏洞都可能导致严重后果。如果数据工程师没有将可伸缩性、可靠性和可操作性等非功能性需求作为首要考虑因素来构建…

ChatGPT商业化平台一键部署(API管理,发卡收费,使用平台,支持GPT4)

接下来我就介绍一下如何利用开源平台搭建一个商业化的chatgpt网站 但是在此之前,请大家认真学习并遵守: OpenAI 的使用条款以及当地法律法规,不得用于非法用途。根据《生成式人工智能服务管理暂行办法》的要求,请勿对中国地区公众提供一切未经备案的生成式人工智能服务。一…

智慧公厕的全域感知、全网协同、全业务融合和全场景智慧赋能

公共厕所是城市的重要组成部分&#xff0c;为市民提供基本的生活服务。然而&#xff0c;传统的公厕管理模式存在诸多问题&#xff0c;如排队等候时间长、卫生状况差、空气质量差等&#xff0c;严重影响市民的出行和生活质量。为了解决这些问题&#xff0c;智慧公厕应运而生&…

Android9.0以后不允许HTTP访问的解决方案

背景 自 Android 9.0 起&#xff0c;默认禁止使用 HTTP 进行访问。当尝试使用 HTTP 链接时&#xff0c;将会收到以下错误信息&#xff1a; "Cleartext HTTP traffic to " host " not permitted"为了解决这一问题&#xff0c;下面介绍两种破解方法&…

【Python基础教程】4 . 算法的空间复杂度

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;python基础教程 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、…

最短路-Floyd Dijkstrea

Floyd算法 一种求解“多源最短路”问题的算法 在Floyd算法中&#xff0c;图一般用邻接矩阵存储&#xff0c;边权可正可负&#xff08;但不允许负环&#xff09;&#xff0c;利用动态规划的思想&#xff0c;逐步求解出任意两点之间的最短距离 int d[N][N],初始为无穷 d[i][j…

拌合楼管理软件开发(十三) 对接耀华XK3190-A9地磅(实战篇)

前言: 实战开整 目前而言对于整个拌合楼管理软件开发,因为公司对这个项目还处于讨论中,包括个人对其中的商业逻辑也存在一些质疑,都是在做一些技术上的储备.很早就写好了串口与地磅对接获取代码,也大概知道真个逻辑,这次刚好跟库区沟通,远程连接到磅房电脑,开始实操一下. 一、地…

【极简主义的深度学习】01 概览深度学习

要学习一个东西&#xff0c;需要先想清楚为什么而出发&#xff0c;以及怎么能达到自己想要的效果。当然也不能太执着于自己的目标&#xff0c;沿途的风景也是非常美丽的&#xff0c;如果路边的风景你觉得很美就停下来欣赏&#xff0c;机器学习也一样。对于我来说&#xff0c;是…

GFW不起作用

闲着折腾&#xff0c;刷openwrt到一个小米3G路由器后&#xff0c;GFW不起作用。后面发现是自己电脑设置了DNS&#xff0c;解析完IP后&#xff0c;在经过代代&#xff0c;IP不在GFW的清单里&#xff0c;所以转发控制就没有起作用。 结论 在经过代代前的所有节点&#xff0c;都…

使用Selenium的execute_script方法执行JavaScript代码

Selenium 的 execute_script 方法允许在浏览器上下文中执行 JavaScript 代码。这对于执行一些 WebDriver 本身不提供的操作非常有用&#xff0c;比如直接操作 DOM 元素、执行一些特定的 JavaScript 功能等。这个方法的一般语法是&#xff1a; driver.execute_script(script, *…

Java基础知识总结(30)

注解 获取注解中的值 /*** 自定义注解*/ Target({ElementType.TYPE,ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) public interface MyAnno { ​String value() default "admin"; // String value(); // int age(); } ​ //若注解属性没有给定属…

一.Git环境

1.Linux安装 sudo apt-get install git2.初次运行Git的配置 当我们安装好Git后&#xff0c;还需要在Git bash或者terminal进行一些相关设置&#xff0c;以下设置仅需设置一次即可。 git config --global user.name "Your Name" git config --global user.email &q…

【C++】反向迭代器

一、前言 在前面对vector等容器的学习中&#xff0c;我们学会了如何去使用正向迭代器并模拟实现 但是我们没有去模拟实现反向迭代器&#xff0c;这篇文章中我们就来了解反向迭代器的底层并实现它&#xff0c;把之前的坑给填上。 二、反向迭代器 反向迭代器的底层设计十分精妙…