<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[m0_69089705的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/m0_69089705</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; m0_69089705]]></copyright><item><title><![CDATA[关于网游框架如何搭建的理解]]></title><link>https://blog.youkuaiyun.com/m0_69089705/article/details/146400932</link><guid>https://blog.youkuaiyun.com/m0_69089705/article/details/146400932</guid><author>m0_69089705</author><pubDate>Thu, 20 Mar 2025 17:48:42 +0800</pubDate><description><![CDATA[第一种：就是对于不同的类型消息会有不同的处理，比如账户类，我们就创建AccountBLL类业务逻辑层，专门用来处理账户类型消息。注册账户就是要创建一个账户模型类对象，还有角色模型类，里面的基本信息有id，血量，位置，那个类型的角色等，创建一个角色就是要创建一个角色模型信息对象。第二种：大致原理一样，只是不用创建三层，当接收到消息时，直接执行每个监听对象的onreceive方法，每个监听对象的onreceive方法中都会有if(type==?//判断是什么类型，因为不同的类型执行不同的逻辑。]]></description><category></category></item><item><title><![CDATA[序列化与反序列化、Xml文件的读写]]></title><link>https://blog.youkuaiyun.com/m0_69089705/article/details/143018612</link><guid>https://blog.youkuaiyun.com/m0_69089705/article/details/143018612</guid><author>m0_69089705</author><pubDate>Thu, 17 Oct 2024 17:38:51 +0800</pubDate><description><![CDATA[1.准备工作：找关系，可以把三个标签看成Book类的三个对象，id，name，author，price可以看成Book类对象的属性，文本内容就是对应的属性值。我们现在要在桌面下创建一个xml文件，内容是如下图片的信息：开头标签表示声明，有标签，它有三个子标签，每个又有三个子标签。//获得根标签所有的子节点，（之所以说节点，是节点可以包含元素节点，文本节点，属性节点，所以我不嫩职介所子标签，但是这里它只有子标签）]]></description><category></category></item><item><title><![CDATA[文件的读写、FileStream]]></title><link>https://blog.youkuaiyun.com/m0_69089705/article/details/142903269</link><guid>https://blog.youkuaiyun.com/m0_69089705/article/details/142903269</guid><author>m0_69089705</author><pubDate>Tue, 15 Oct 2024 19:39:59 +0800</pubDate><description><![CDATA[/这里讲解writeallbytes，utf-8是将ascall中的不变，还是一个字节，其它有两个字节和三个字节。//使用多次时，只会以最后一次的结果为准，比如又用了text，又用了lines，又用了bytes。第三个参数：指定访问权限。//当字节开头是0就读取一个字节，当字节开头是110，则读取两个字节，1110就读取三个字节。//给那个数组，从那个位置开始写，写多少个，会返回读取到的数据个数。//关闭数据流，释放数据流，减少占用内存，释放空间。//创建数据流，参数操作的路径、文件打开方式、访问权限。]]></description><category></category></item><item><title><![CDATA[Path、File、FileInfo、Directory、DirectoryInfo]]></title><link>https://blog.youkuaiyun.com/m0_69089705/article/details/142885187</link><guid>https://blog.youkuaiyun.com/m0_69089705/article/details/142885187</guid><author>m0_69089705</author><pubDate>Sun, 13 Oct 2024 19:05:34 +0800</pubDate><description><![CDATA[如果需要将处理好的数据永久保存，那么就需要IO流技术将处理好的数据存入文件中，文件又是按照路径存储在磁盘上的，因此我们要学会路径的操作。string[] directoryfiles = Directory.GetFileSystemEntries("C:\\Users\\11442\\Desktop\\10.13\\文件夹01");string[] directots=Directory.GetDirectories("C:\\Users\\11442\\Desktop\\10.13\\文件夹01");]]></description><category></category></item><item><title><![CDATA[隐式类型、元组、对象初始值{}、？]]></title><link>https://blog.youkuaiyun.com/m0_69089705/article/details/142873300</link><guid>https://blog.youkuaiyun.com/m0_69089705/article/details/142873300</guid><author>m0_69089705</author><pubDate>Sat, 12 Oct 2024 19:38:52 +0800</pubDate><description><![CDATA[var是一种隐式类型声明，它允许编译器根据变量的初始化表达式来推断变量的类型，使用var时，编译器会在编译阶段确定变量的类型，，比如var num=5；具名元组：（name1：value1，name2，value2...）比如(name:"hello",id:123);// driveInfo.ToString()会报错的，因为tostring是实例方法，而driveinfo没有执行具体的对象。//匿名类型，创建了一个匿名类型的对象，他有两个属性Name，Id。//name，id无效。]]></description><category></category></item><item><title><![CDATA[迭代器的使用]]></title><link>https://blog.youkuaiyun.com/m0_69089705/article/details/142869127</link><guid>https://blog.youkuaiyun.com/m0_69089705/article/details/142869127</guid><author>m0_69089705</author><pubDate>Sat, 12 Oct 2024 11:07:16 +0800</pubDate><description><![CDATA[IEnumerable该接口主要提供对外可以使用的迭代器，他只有一个方法GetEnumerator()，当一个类继承了这个接口，就可以获取迭代器，使用foreach遍历其中的元素了。//设置一个初始索引,一定要给初始值，一般来说foreach是不会用到reset（）方法的，所以初始值就是成员定义的初始值，你也可以试试这里给0，reset里面给-1，输出结果会从第二个元素开始。//一般出现在手动控制迭代的场景才使用reset（），比如多次遍历一个集合，或者在遍历过程中因为某些原因需要重新遍历。]]></description><category></category></item><item><title><![CDATA[系统特性、自定义特性]]></title><link>https://blog.youkuaiyun.com/m0_69089705/article/details/142858012</link><guid>https://blog.youkuaiyun.com/m0_69089705/article/details/142858012</guid><author>m0_69089705</author><pubDate>Sat, 12 Oct 2024 09:11:04 +0800</pubDate><description><![CDATA[/找出所有的类上的特性，因为isdefined指判断有没有，不知道有几个,最后返回一个object数组，内容都是特性实例。[Record("修改", "Jason", "2029-1-2", "验证特性修饰方法")]//首先判断这个类上有没有使用指定的特性，是只看类上有没有，false表示不继承父类上的特性。//将定义的特征只能描述类或者方法,并且允许出现多次，默认是类，方法，属性，字段等都可以。[Record("增加","Amy","2028","验证特性修饰方法")]//获取方法上的特性。]]></description><category></category></item><item><title><![CDATA[反射的定义与应用]]></title><link>https://blog.youkuaiyun.com/m0_69089705/article/details/142829882</link><guid>https://blog.youkuaiyun.com/m0_69089705/article/details/142829882</guid><author>m0_69089705</author><pubDate>Fri, 11 Oct 2024 16:23:46 +0800</pubDate><description><![CDATA[/获取公共的访问字段,上述的id是获取不到的,可以用GetFields函数的重运载方法获取,如FieldInfo[] fieldInfos= type.GetFields(BindingFlags.Static);如果需要获取类型的信息，就需要获取类型的Type对象，虽然通过实例化对象可以访问成员的信息，但是有局限性，比如类型的私有成员，泛型接口约束，接口实现   ，基类等仅仅依靠实例化对象很难获取，但是使用Type对象就可以简单的了解类型的全面信息。3.Type.GetType（“类型空间.类名”）；]]></description><category></category></item><item><title><![CDATA[多线程、预处理]]></title><link>https://blog.youkuaiyun.com/m0_69089705/article/details/142825624</link><guid>https://blog.youkuaiyun.com/m0_69089705/article/details/142825624</guid><author>m0_69089705</author><pubDate>Thu, 10 Oct 2024 19:02:43 +0800</pubDate><description><![CDATA[/行预处理指令(可以指定错误信息和警告信息出现的行数和文件名)Console.WriteLine("正在执行大窗口文件");Console.WriteLine("正在执行小窗口文件");Console.WriteLine("正在执行主路径");//提供一个错误信息和警告信息。比如我们现在在主路径开辟两个路径，一个执行大窗口文件，一个执行小窗口文件。多线程：是给程序开辟多个执行的路径，使得程序可以同时执行不同的业务逻辑。//一定要先开辟并启动其它路径，否则还是先执行完主路经在运行其它路径的。]]></description><category></category></item><item><title><![CDATA[协变和逆变、事件、匿名函数]]></title><link>https://blog.youkuaiyun.com/m0_69089705/article/details/142814366</link><guid>https://blog.youkuaiyun.com/m0_69089705/article/details/142814366</guid><author>m0_69089705</author><pubDate>Thu, 10 Oct 2024 14:50:21 +0800</pubDate><description><![CDATA[匿名函数：没有名字的函数，主要配合委托和事件一起使用，没有委托和事件。//对于事件是无法在其它类中初始化和调用的，但是可以进行+=，-=操作。//定义事件,只能在本类中初始化和调用，其他类可以间接调用。事件：事件是基于委托的，简单理解为事件是一种更为安全的委托。//对于普通委托对象是可以在其它类中初始化和调用。//定义一个Action对象字段。{   //定义一个Del对象字段。//定义一个事件对象字段。//定义了一个无返回值，有参数的委托。//定义无参数无返回值函数。//定义无返回值无参数委托对象。]]></description><category></category></item><item><title><![CDATA[委托、系统委托（Action，Func）]]></title><link>https://blog.youkuaiyun.com/m0_69089705/article/details/142766994</link><guid>https://blog.youkuaiyun.com/m0_69089705/article/details/142766994</guid><author>m0_69089705</author><pubDate>Tue, 08 Oct 2024 20:20:34 +0800</pubDate><description><![CDATA[Action是一个无参数但是可以有返回值的委托，参数个数可以有从0~8个，（以下是在系统截取的Action委托的定义）Func是一个有参数可以有返回值的委托，参数个数可以有从0~8个。定义：委托是一个类，它定义了方法的类型，用这个方法类型创建变量就可以存储方法了。//定义一个无返回值无参数的委托,这就代表Del0只能存无参数无返回值的函数。//定义一个有返回值有参数的委托，这就代表Del1只能存无参数无返回值的函数。//int是参数类型，string是返回值类型。return $"{Id}:你好";]]></description><category></category></item><item><title><![CDATA[LingedList＜T＞，自定义泛型]]></title><link>https://blog.youkuaiyun.com/m0_69089705/article/details/142760319</link><guid>https://blog.youkuaiyun.com/m0_69089705/article/details/142760319</guid><author>m0_69089705</author><pubDate>Tue, 08 Oct 2024 18:44:37 +0800</pubDate><description><![CDATA[/查找，第一个节点会存储在LinkedList类中的LinkedListNode First属性，最后一个节点会存储在LinkedList类中的LinkedListNode Last属性。链表（LinkedList）：分为单链表和双链表，单链表的对象存储的是自己的value和下一个对象的address。//上述先创建了第一个节点Value是Mike，又创建了第二个节点Value是Jason，第一个节点指向第二而节点，第二个节点又指向第一个节点。泛型的声明可以有多个，多个泛型使用一个<>，用逗号隔开。]]></description><category></category></item><item><title><![CDATA[Queue、Hashtable]]></title><link>https://blog.youkuaiyun.com/m0_69089705/article/details/142728880</link><guid>https://blog.youkuaiyun.com/m0_69089705/article/details/142728880</guid><author>m0_69089705</author><pubDate>Sun, 06 Oct 2024 19:30:18 +0800</pubDate><description><![CDATA[对于引用类型：equal比较的是两个对象的地址是否相同；对于值类型：equal是比较对象的值，就像struct是值类型，equal就是比较他的成员的值是否相等。gethashcode怎么算的不用管，只要知道对于相同的值，其hashcode也相同。//当我们重写equal函数时，发现编译并没有报错，其实还与该对象的hashcode有关。Queue也是系统提供的一个容器类，底层也是object[]，特点是先进先出,可以存储重复元素。//然而我们希望里面的成员相同我们就希望这两个key相同，这就要重写。]]></description><category></category></item><item><title><![CDATA[ArrayList、Stack类]]></title><link>https://blog.youkuaiyun.com/m0_69089705/article/details/142727259</link><guid>https://blog.youkuaiyun.com/m0_69089705/article/details/142727259</guid><author>m0_69089705</author><pubDate>Sun, 06 Oct 2024 16:28:41 +0800</pubDate><description><![CDATA[特点：底层是对object[]进行操作的，可以存储任何的数据类型，所以当需要对不同的数据类型操作时可以使用ArrayList，当对字符串进行操作时，可以选择AtringBuild。//添加范围，ICollection接口对象，所以可以填arraylist类对象，继承了接口的。Console.WriteLine(arrayList.IndexOf("东莞"));//转换数组遍历，转换的数组元素也是按照栈顶到栈底的顺序。//查找：索引，容量（超过也是会扩容的），当前元素个数。//查找:元素个数，栈顶元素。]]></description><category></category></item><item><title><![CDATA[String、StringBuilder]]></title><link>https://blog.youkuaiyun.com/m0_69089705/article/details/142717700</link><guid>https://blog.youkuaiyun.com/m0_69089705/article/details/142717700</guid><author>m0_69089705</author><pubDate>Sat, 05 Oct 2024 20:19:10 +0800</pubDate><description><![CDATA[前面所说了字符串的存储类型，在进行字符串的拼接操作时往往又会重新开辟新的而空间，这样就会创造很多字符串对象，所以系统提供了可变容量的字符串拼接操作。//2.动态创建字符串的情况，当通过一些new或者一些字符串操作时，会开辟新的内存空间。//1.字符串常量池，当使用string="abc"时,系统会判断常量池里有没有，如果有直接拿来用。//比较,==比较字符串的内容是否相等,在string中也是对==做了运算符的重运载定义。//子串,(3)就代表从第三索引之后，(3,5)就代表从第三个到第五个索引。]]></description><category></category></item><item><title><![CDATA[object]]></title><link>https://blog.youkuaiyun.com/m0_69089705/article/details/142714272</link><guid>https://blog.youkuaiyun.com/m0_69089705/article/details/142714272</guid><author>m0_69089705</author><pubDate>Sat, 05 Oct 2024 15:53:47 +0800</pubDate><description><![CDATA[if(this.name==((Person)obj).name&&this.id==((Person)obj).id)   //注意优先级，.>转换。public override bool Equals(object obj)    //可以查看父类的tostring是virtual所以可以重写。// object.Equals():比较两个对象，是值类型就比值，是引用类型比地址。// obj.Equals()是引用类型就比较地址，是值类型就比较值。//返回该对象的类型（命名空间.类）]]></description><category></category></item><item><title><![CDATA[sealed关键字、命名空间]]></title><link>https://blog.youkuaiyun.com/m0_69089705/article/details/142712023</link><guid>https://blog.youkuaiyun.com/m0_69089705/article/details/142712023</guid><author>m0_69089705</author><pubDate>Sat, 05 Oct 2024 11:57:06 +0800</pubDate><description><![CDATA[/或者不用using，使用demo0.demo1.Add add=new demo0.demo1.Add();后者 ：sealed在修饰函数时，必须用于重写的方法之上。（一定是父类--->子类--->孙子类，在子类重写且密封，孙子类不能继续重写）sealed定义：主要用于修饰函数和类，修饰的类被称为密封类不能被继承，修饰的函数叫密封函数不能被子类重写。5.sealed，修饰重写后的函数，防止该函数在派生类中再次重写。4.abstract，定义抽象函数，该函数没有函数体。Wield() //报错。]]></description><category></category></item><item><title><![CDATA[抽象类、接口]]></title><link>https://blog.youkuaiyun.com/m0_69089705/article/details/142694433</link><guid>https://blog.youkuaiyun.com/m0_69089705/article/details/142694433</guid><author>m0_69089705</author><pubDate>Thu, 03 Oct 2024 20:00:38 +0800</pubDate><description><![CDATA[但是只能是public，这是因为接口的目的是定义一组契约，需要对介入接口的类完全可访问，并且是一种规范。2、接口是不能new出对象的，原因它只是定义了一组契约，没有实现的方法，何况没有构造函数，所以接口的实例化只能通过里氏转换。如果一个类中，具有不知道该如何描述功能的函数，那么可以将这个函数描述为抽象函数，具有抽象函数的类叫做抽象类。1、接口只能继承接口，普通类可以继承父类的同时继续实现接口，而且可以是多接口，一旦继承接口就要实现里面的成员。Console.WriteLine("我是中国人，我很自豪");]]></description><category></category></item><item><title><![CDATA[子类的初始化、多态]]></title><link>https://blog.youkuaiyun.com/m0_69089705/article/details/142684802</link><guid>https://blog.youkuaiyun.com/m0_69089705/article/details/142684802</guid><author>m0_69089705</author><pubDate>Thu, 03 Oct 2024 17:09:29 +0800</pubDate><description><![CDATA[如下：new Chinese()既可以被看成Person类也可以被看成Chinese类，这就涉及到了当父类对象指向子类对象的时候，且都具有同名函数，这是当不做任何处理父类对象只能访问父类成员，这时可以使用显性转换（前面所学的），或者vob方式，即：在父类同名函数加上virtual关键字，在子类同名函数中加上override关键字，当还需要调用父类同名函数时，在子类同名函数使用base关键字。过程：创建子类对象的过程（在用new创建子类对象时，默认会先执行父类的无参构造函数）//父类无参构造函数。]]></description><category></category></item><item><title><![CDATA[c#里氏替换]]></title><link>https://blog.youkuaiyun.com/m0_69089705/article/details/142683722</link><guid>https://blog.youkuaiyun.com/m0_69089705/article/details/142683722</guid><author>m0_69089705</author><pubDate>Wed, 02 Oct 2024 19:59:36 +0800</pubDate><description><![CDATA[/is关键字用于检查对象实际运行时类型，虽然传递了Rectangle子类，也进行了隐式转换，但只是把他当作Shape类对象在方法里去使用，实际的对象信息并没有改变（可以理解为不在方法里了他实际还是Rectangle类对象,is就是这个作用）。//shape不能访问Rectangle类的成员，这是因为能否访问成员是根据变量声明决定的，shape是Shape类，决定了他只能访问自己的成员，而不能访问子类的成员。//Rectangle是基类，Shape是父类。定义：父类对象存储子类对象。如果需要则要显示转换。]]></description><category></category></item></channel></rss>