- 博客(62)
- 收藏
- 关注
原创 ADO.NET 实体数据模型----简单使用
创建:在一个Project中添加ADO.NET实体数据模型,选择空EF设计器模式,完成。添加实体:在.edmx文件中,右键新增实体,输入实体名称,设置主键,确定。创建关联:在有多个实体后,在.edmx文件中,右键新增关联,多重性为对应关系,如下图为一个学校对应多个学生。导航属性相当于外键,学校要访问Student的时候,使用Student访问。创建完成之后,右键根据模型生成数据库,选择要连接的数据库点击下一步会生成SQL语句,负责,点击完成打开数据库,新建查询,将生成的SQL语句粘贴
2021-10-05 08:34:59
1602
原创 类/属性,方法,事件/引用变量,实例/静态成员,非静态成员
Q1:类类是对现实事物抽象得到的结果。类为现实世界事物的模型,抽象即建模的过程。Q2:属性、方法、事件属性:类存储数据的功能,可表示当前类或对象的数据。方法:表示类或对象能做什么事件:类或对象通知其它类或者对象的机制Q3:引用变量与实例使用new操作符可以创建实例,为了使用创建的实例便有了引用变量。当把实例比作气球,引用变量表示小孩可存在的情况:单独存在气球单独存在小孩小孩通过绳子牵着气球多个小孩通过不同的绳子牵着同一个气球多个小孩通过同一绳子牵着通一个气球(REF修饰符修饰的
2021-08-28 23:51:00
220
原创 引用,名称空间,类,类型的根,对象哈希码,new操作,转换
Q1:引用类库的中类调用的物理基础,dll后缀名文件,为引用文件。在引用中添加相关的dll文件之后,便可以调用类库中的类和其方法,进行使用。白盒引用:dll文件project包含在solution中,可以很方便的debug出来黑盒应用:只有编译完成的dll文件,有问题只能等其修改,重新编译后才可以使用。以为类库与类库之间也有依赖关系,所以为了一次性把顶层类库和其依赖的底层类库一起引用,便有了类库包形式的引用,NUGET技术Q2:名称空间名称空间是一一种合理的方式(树的形式)组织了类和其他类型
2021-08-26 04:33:52
230
原创 命立模式----初理解
命立模式:将方法独立出来,进行是实例化,方便指针回调例子:输入A 输出A输入B 输出B class Program { static void Main(string[] args) { Player player = new Player(); string inputValue = null; Console.WriteLine("请输入按键"); inputValue = Conso
2021-04-09 22:26:47
185
原创 C#--泛型
1.为了解决代码爆炸而出现,并且减少装拆箱操作而出现,提高代码的重用1)定义算法,并不定义算法所要操作的数据类型,使用时在定义操作的数据类型2)允许在class struct interface delegate中定义泛型3)若定义了一个T,源代码使用数据类型的任何地方都可以使用T4)泛型的定义都跟在命名后面 如 class class_nume {} void function_name(){} delegate void delegate_name(T a)2.使用泛型带来的好处:1
2020-12-11 16:14:04
521
原创 Lua--初学--垃圾回收
Lua垃圾回收的关键字:collectgarbage("")常用的参数为:count–查看当前lua脚本运行时所占用的内存(得到的值要*1024)collect–回收当前的垃圾参数使用完之后,置空,就可以进行回收在进行热更新的时候,一般不选择自动的回收机制,而采用手动置空,然后回收的方式Demo:test={a,b}print(collectgarbage("count"))test=nilcollectgarbage("collect")print(collectgarbage("c
2020-11-04 14:53:03
163
原创 Lua--初学--new,inherit总结
1.基于元表进行使用原理:当设置了元表,并且设置了元表的__index,当前表没有的属性会根据__index指向的表进行寻找2.new的过程:返回一张空表,并且设置元表为调用new方法的表3.inherit的过程:往_G表(存储所有全局变量的表),写入一张表,并且设置元表为调用inherit--封装Object={}Object.posx=0Object.posy=0--new 实例化function Object:new( ) local obj={} setmetatable(
2020-11-03 16:35:24
579
原创 Lua--初学--inherit(className)的实现
1.原理运用元表,和元表的__index,与new不同的是,作为元表的子表,在直接写到_G表中作为全局表。本质上是有无写到_G表中,并且如果使用继承的形式,在声明一个实例,当没有给变量赋值的时候,根据__index的嵌套原理,访问的是父类中的属性(newClassInstance->通过元表__index=NewClass找到NewClass->NewClass通过元表__index=Object找到Object)。表现为作为实例化的表,用作变量使用,作为继承的表,当作声明表的变量使用O
2020-10-22 11:46:05
505
原创 Lua--初学--类的new()方法类似实现
1.原理:利用元表,这一个new方法中声明一个方法的本地表,作为元表的子表,并且返回出去,当一个变量利用赋值的时候,就会得到一个空表,并且继承了一个元表。并且对元表__index进行了赋值,所以在外部的调用的时候,看似调用的是返回出来的空表,实际上访问的还是元表中的内容。并且当对表进行变量的赋值的时候,相当于在子表中创建了一个新的变量,所以在第二次调用Test方法中的过程是:mytable 中没有Test变量,从元表中找到,并且把mytable作为变量传入->mytable中已经创建了id变量
2020-10-22 00:22:55
2926
原创 Lua--初学--元表
1.概念(父子表)任何表变量都可以作为另一个表变量的元表任何表变量都可以有自己的元表当在子表中进行一些特定操作的时候,会执行元表中的内容2.设置①声明两张表meta={}mytable={}②设置元表setmetatable(mytable,meta) arg1为子表,arg2为元表3.操作①__tostring:当子表要被当作字符串使用时,会默认调用 元表中的__tostring方法meta2={__tostring=function()return "onestring"
2020-10-14 17:39:02
219
原创 Lua--初学--协程
1.协同程序的概念:函数只运行一次,每一帧都要运行。Update,每帧都会重新调用2.协程的创建:①coroutine.createfun =function ()print(123)endco=coroutine.create(fun)print(type(co)) 输出thread②corountine.wrap()co2=coroutine.wrap(fun)print(type(co)) 输出function3.协程的运行:通过使用create创建的协程:corou
2020-10-09 14:06:13
236
原创 Lua--初学--多变量赋值,多返回值接取,and or的短路用法
1.多变量赋值格式a,b,c=1,2,"123"print(a,b,c)输出:1,2,“123”a,b,c=1,2print(a,b,c)输出:1,2,nil在给多变量赋值的时候,当值不够的时候,会自动给变量补空,当值过多的时候,会自动丢弃2.多返回值的接取function GetSomeValue() return 1,2,3enda,b,c=GetSomeValue()print(a,b,c)a,b=GetSomeValue()print(a,b)a,b,c,d=
2020-10-06 12:52:24
846
2
原创 Lua--初学--本地变量,全局变量,require
1.本地(局部)变量local value_name =value2.全局变量value_name=value3.区别①在循环中,循环体的变量,如果没有使用local关键字的话,能够在循环体外部使用变量for i=1,2 do b=2endprint(b)输出:2for i=1,2 do local b=2endprint(b)输出:nil②在function中,变量,如果没有使用local关键字的话,能够在方法的外部使用变量function testfunction(
2020-10-05 23:38:28
1110
原创 Lua--初学--table常用的公共方法
1.table.insert(table1_name,table2_name) 将table2_name的值插入到table1_namet1={{name="123",age=1},{name="456",age=2}}t2={name="789",age=3}table.insert(t1,t2)2.table.remove(table_name,[index]),如果参数列表中没有index的时候,移除的是table中的最后一个元素,有index的时候移除的是table[index]的元素
2020-10-04 12:43:35
289
原创 Lua--初学--实现类
1.声明:Demo={value1=1,value2="value2",value3=true,functiondemo =function ( ) print("Demo中的一个方法")end,}2.调用:注意的是lua中没有new关键字,所以这里实现的类的效果,更像是静态类print(Demo.value1)print(Demo.value2)print(Demo.value3)Demo.functiondemo()3.添加新的字段,直接在外部使用.操作符输入要添加新的字
2020-10-03 17:46:51
450
原创 Lua--初学--key,value组成的表
1.形式:a={[key1]=value1,[key2]=value2,[key3]=value3,……}访问a[key1]a.key1 不能访问number或者"number"的key值2.当给已存在的a,添加新的key的时候a[“new_key”]=new_value3…要删除一个key,value时,把对应key值下的value置nil即可a[key]=nil4.遍历的时候,使用pairs遍历遍历的形式:①:for k,v in pairs(a) doprint(k,v)
2020-10-01 09:53:22
4717
原创 Lua--初学--遍历
value={…}1.遍历的形式:for循环,利用#获取长度的遍历for i,#value do print(value[i])endipairs遍历for i,v,ipairs(value) do print(i,v)endpairs遍历for k,v,pairs(value) do print(k,v)end2.因为数组使用的过程,会因为nil,或者自定义索引的原因导致数据没有办法完整的遍历出来value={[“第一个元素”]=1,[“第二个元素”]
2020-09-26 15:32:18
736
原创 Lua--初学--表定义
1.概述:表结构是所有复杂数据的基础:数组,二维数组,字典,类等等2.表的声明value={}----空表3.使用表来实现一维数组value={1,2,3,4,5,“123”,true,nil}在使用#,来获取value的长度的时候,会忽略掉队尾的nil注意:1.如果这里的nil在前面也会从nil开始进行忽略2.有些版本只会忽略队尾的nil,具体的根据编译结果进行判断4.数组遍历遍历的时候忽略情况,同获取长度的时候一样。遍历使用for循环for i=1,#a doprint(val
2020-09-24 02:03:18
791
原创 c#--知识点整理--类中使用索引
有一个管理类XManagers,用来存储,管理,X类型的变量class XManagers<T>{ private List<T> xManagers=new List<T>(); public void Add(T arg){ this.xManagers.Add(arg); }//声明索引器,要添加一个get public T this[int index] { get return this.xManagers[index]; }}c
2020-09-23 14:38:34
227
原创 Lua--初学--function
1.函数的格式function function_name()end或者a=function()end函数声明之前,不能调用----与C#不同的是,C#在new的时候,就编译好了,就可以随时调用;lua要先声明,在调用从第二种可以看出,func是一种变量类型。有点类似与c#中的委托和事件的写法2.有参数的函数格式----多传了参数会丢弃,少传了参数会补空function function_name(arg) print(a)end注意arg是不指定变量类型的。注意的是,
2020-09-23 01:41:53
1116
原创 Lua--初学--循环语句
1.while格式while 条件 do执行语句end2.repeat until格式repeat执行语句until 条件----满足条件跳出,结束条件,与C#不同的是 C#的Do while(进入条件)3.for 的格式:for i=1----循环变量,5----结束条件 do ----默认的给循环变量递增执行语句endfor i=1,5,2----循环变量递增的数量4.注意的点是①循环语句块使用do,来衔接②repeat until 条件, 其中的阿条件为退出条件③
2020-09-20 14:21:48
352
原创 Lua--初学--条件分支语句
1.格式:if 条件 then执行语句elseif 条件 then执行语句【else】【执行语句】end需要注意的点①条件 不用括号()②执行语句不用{} 而是使用then③elseif 中间不加空格在lua中没有switch语法,需要自己实现条件是和条件运算符和逻辑运算符混合使用print("条件分支语句的使用")--单条件判断a=9if a<=9 then print("a<=9")end--if else 使用if a<=8 then p
2020-09-20 13:46:15
466
原创 Lua--初学--运算符
1.算术运算符:+ - * / ^在lua中由于都是number类型,所以使用/的时候不会向下取整,而是会得到一个小数,如1/2=0.5lua不支持复合运算符如+= -=lua支持幂运算 print(3^2) 会输出9另外当一个字符串,能够变为number类型的时候也能使用算术运算符进行运算print(“123”+1) 会输出1242.条件运算符:> < >= <= == ~=需要注意的是在lua中的!= 要写作~=使用条件运算符的返回都为bool类型3.逻辑运算
2020-09-19 16:22:41
1414
原创 Lua--初学--string
1.字符串的长度获取----#+变量a="abcdefgSSS"print(#a)比较特殊的是:引文算一个长度,汉字算三个长度2.换行符a="abcde\nfghij"print(a)打印结果为abcdefghij和a=[[abcdefghif]]print(a)结果一样3.字符串的拼接…a="123"b="456"print(a..b)无论附上什么类型的值使用…之后返回的都是string类型的4.别的类型转换成字符串类型----tostringa=12
2020-09-17 13:29:27
112
原创 Lua--初学--变量
1.lua,简单的变量有nil----空值number----int,float,double等数值类型string----char,string类型boolean注意的是在lua中变量的声明是不需要声明变量类型的,只需要做初始化,并且可以随便赋值,不需要类型转换,一个没有初始化的变量,直接使用的话是nil类型2.lua,复杂的变量funtion----函数table----表userdata----数据结构thread----协同程序...
2020-09-17 13:27:41
413
原创 《代码整洁之道》读书笔记----第七章错误处理
一、try-catch-finally诞生的原因错误处理的原则:不应该混乱原本代码的逻辑,错误处理不应该杂糅在业务代码中。原本的错误处理:if(异常条件){string error=" XXXX";return error;},代码在逻辑代码中,代码量很多的情况下,要花大量的时间去区分那里是错误处理代码,那里是业务代码。try {业务代码}catch(){错误处理代码}finaly{资源释放代码}二、代码不应该抛出特定的异常代码主动抛出特定异常,会造成每次有新的异常出现的时候,就要打开封装好的
2020-09-01 20:31:08
221
原创 《代码整洁之道》读书笔记----第六章对象和数据结构
一、数据抽象1.类是如何把自己的数据展示给外界(1)直接暴露数据,类似与数据结构的形式(2)用户通过函数直接操作数据本体,而不用知道数据本身,以抽象的方式展示数据2.不暴露数据细节,以抽象的形式展示数据的时候,不只是添加接口,或者使用复制器、访问器就可以,要以最好的方式呈现某个对象包含的数据,需要严加的思考。二、数据、对象的反对称性数据结构:曝露其中数据,没有提供有意义的函数class Student{ string name; int id;}class Teacher{ str
2020-09-01 03:07:35
241
原创 《代码整洁之道》读书笔记----第五章格式
选用一套管理代码格式的简单规则,然后贯彻这些规则。自动化工具已经完成了很多代码格式的规范工作。代码的可读性,影响到代码的可维护性和扩展性;代码格式影响到代码的可读性。让代码能够不是最重要的,最重要的是规范代码格式,提高代码可读性。1.垂直方向在项目文件中,用大多数200行到500行的单个文件可以构建出出色的系统,尽管让代码保持在200~500行的文件是软性的规定,但是短的文件比长的文件更加通俗易懂;在项目文件的顶部,是高层次的概念和算法,细节是逐渐往下展开;换行符的作用,在不同的思路之间使用换
2020-08-31 14:16:13
193
原创 《代码整洁之道》读书笔记----第四章注释
最好的注释就是代码本身。良好的编码习惯,规范的命名,可以让代码清晰可读。好的注释是尽可能少的注释。可以存在的注释:1.法律信息2.提供信息----例如某个变量的用途,最好的办法是通过命名来表现3.代码意图4.阐释5.警示6.TODO7.放大不合理之物的重要性8.公共API的帮助文档大量的注释会让代码的可读性降低。如果需要编写注释来解释一段糟糕的代码的时候,不如进行代码重构,而且注释随着代码的修改,会带有误导性。...
2020-08-24 13:26:38
166
原创 《代码整洁之道》读书笔记----第三章函数
写代码的过程使用一种语言描述一个系统故事。写的过程,保持代码的精确,清晰,是能讲好故事的基础。函数,即方法名,是一个动词。1.短小函数体应该保持短小,最好每个函数体的封顶上限应该是20行。2.if/else while等语句中块内尽量调用“有意义签名”的函数,意味着函数不应该有嵌套结构,缩进不应该多与一层或两层。3.只做一件事函数中的语句,应该是一抽象层使用几条指令处理或者使用下层抽象进行处理。一个只做一件事的函数,无法很合理的切分成几个部分立即。举个例子睡觉(){躺床上();闭眼();
2020-08-20 22:00:33
203
原创 C# 迭代器的实现,整理
声明一个类实现IEnumerable接口class MyIEnumerable : IEnumerable { public IEnumerator GetEnumerator() { throw new NotImplementedException(); } }实现的接口是要求返回一个IEnumerator。即要实现一个迭代器,所以在这个类中实现这个迭代器class MyIEnumerable : IEnumerable {
2020-08-17 16:26:54
228
原创 EF连接数据库错误----connectionString设置错误修正
遇到的问题:EF连接数据库的时候连接数据库 连接不上,提示:基础提供程序在 Open 上失败。 —> System.Data.SqlClient.SqlException: 无法打开登录所请求的数据库因为没有报关键字错误,或者“XXX”无效,所以第一时间没有想到是connectionString设置错误,后面看了数据库也没有错误,重新回来看连接字段的内容因为是数据库请求除了问题,只看三个地方data source 数据源,IP地址initial catalog 数据库Intergr
2020-08-13 05:38:08
1721
原创 《代码整洁之道》读书笔记----第二章
有意义的命名----命名工作伴随着整个编码过程命名规则:1、名副其实通过命名,就可以大概得知变量,方法,类的用途有更好的命名的时候,要替换掉旧的2、避免误导如果命名有掩盖变量,方法,类的本来用途的时候,就要替换掉。像是accountList,用来指示一组账号。可是List像是在说明这是一个列表类型的账号列表。可是这组账号不一定是列表类型,只是单纯的想表示,这个变量用来存储一组账号信息。所以这里比较好的命名是:accountGroup/bunchOfAccount/accounts不同变量
2020-08-12 14:22:20
257
原创 Unity----Shader①初步使用
1.Mesh Filter:存储一个Mesh(网格,模型由那些三角面组成,组成的样子,三角面的一些顶点信息)Mesh Renderer:用来渲染模型的外观,相当于外表贴图,如果Texture没有就是一个纯色的贴图2.Shader编写创建一个空的Shader①给Shader一个名字Shader “Shader/MyShader”{}文件夹名字/Shader名字②创建Shader中的属性,关键字为Properties{}Properties中的属性可以为_Color,_Vector,_Int,
2020-07-31 19:43:40
247
原创 Unity----使用脚本在Unity界面创建Menu
在脚本中,使用[MenuItem(string arg)] 属性可以为Unity的工具栏添加这一栏,然后放在要运行的方法前面。参数中放菜单名称和子菜单名称,如[MenuItem(“My_tool/My_AssetBundle”)]static void BuildAssetBundle() {Debug.Log(“打包中”);}[MenuItem(“My_tool/My_Debuglog”)]static void DebugSomeMessage() {Debug.Log(“输出些什么”);
2020-07-30 02:19:57
507
原创 Unity----资源文件的使用,打包,下载
1.拖拽方式,使用资源在脚本文件中,如果要使用资源文件,可以创建相关资源的类型,然后SerializeField,在Unity中进行赋值。如:我创建了一个脚本,里面有一个类型Material,然后SerializeField,然后在Unity中把相关的Resource拖拽进去,就可以使用了。[SerializeField]Material my_Material;2.使用Resource类,调用Resource的文件夹下的资源在脚本中,声明资源的类型变量,然后调用Resources.Load
2020-07-30 02:17:52
1160
原创 Unity----Socket使用②
在客户端中,要连接到服务器要使用Socket中的Connect(IPEndPoint)方法,把服务器Bind的IPAdress和Port赋值给IPEndPoint,当作参数传进Connect方法,就成功绑定了。向服务器接收消息就用socket的Receive,向服务器发送消息就用socket的Send。public class ChatClient : MonoBehaviour { //展示服务器发送的消息 [SerializeField] Text showText;
2020-07-29 02:14:15
141
原创 Unity----Socket使用①
使用Socket的Demo分析:聊天室:①客户端:UI界面、网络收发I/O②服务器端:网络收发I/O:创建Socket对象->将Socket对象和电脑的应用进行一个绑定->等待连接,连接成功就建立交流的通道(1)创建Socket对象Socket tcpServer = new Socket();进行初始化的构造函数的重载有三个:只有一个参数,参数类型为SocketInformation查看SocketInformation这个东西,转到定义的地方namespace S
2020-07-27 19:44:59
387
原创 Linq知识整理----Where,Select
1.使用方法创建IEnumerable,IEnumerable不是数组类型,为可枚举类型public static IEnumerable<string> GenerateSequence() { var i = 0; while (i++ < 100) { yield return i.ToString(); }yield return 与 return的
2020-07-24 23:26:10
907
原创 Unity----SQLite数据库的连接使用
1.简介:数据库:电子化的文件柜,用户进行增删查改SQLite:轻量级数据库,设计目标为嵌入式,占用资源低(以文件的形式存在应用中),支持主流的操作系统,2.使用SQLite生成DataBase,为后缀sqlite的文件使用sql语句对数据库进行操作3.unity读SQLite文件①把建立好的SQLite数据库文件放到Unity工程的Assets的streamingAssets(到时候可以使用Application.streamingAssetsPathz读到此文件)②导入dll文件,sql
2020-07-22 03:22:05
2303
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人