diff --git a/source/_posts/ASP.NET Core.md b/source/_posts/ASP.NET Core.md index 6a634d4..31243b6 100644 --- a/source/_posts/ASP.NET Core.md +++ b/source/_posts/ASP.NET Core.md @@ -404,13 +404,13 @@ public ResultUtil GetUserInfo() 三大拦截器 -`AuthorizeAttribute` -认证拦截器 -`ActionFilterAttribute` +认证拦截器 `AuthorizeAttribute` -方法拦截器 + + +方法拦截器 `ActionFilterAttribute` ```c# using Microsoft.AspNetCore.Mvc.Controllers; @@ -542,6 +542,6 @@ builder.Services.AddScoped(); -`ExceptionFilterAttribute` -异常拦截器 + +异常拦截器 `ExceptionFilterAttribute` diff --git a/source/_posts/C#.md b/source/_posts/C#.md index 06175fa..93b54e6 100644 --- a/source/_posts/C#.md +++ b/source/_posts/C#.md @@ -103,7 +103,6 @@ using System.Data; DataTable dt = new DataTable(); //创建一个名为"Table_New"的空表 DataTable dt = new DataTable("Table_New"); - ``` ## 列 DataColumn @@ -138,10 +137,9 @@ workTable.PrimaryKey = columns; //比如 表达式类型 示例 // 比较 “总计 >= 500” // 计算 "UnitPrice * Quantity" -// 聚合 Sum(Price) +// 聚合 Sum(Price) workTable.Columns.Add("Total", typeof(Double)); workTable.Columns.Add("SalesTax", typeof(Double), "Total * 0.086"); - ``` ## 复制DataTable @@ -196,3 +194,115 @@ myRow = ObjectTable.LoadDataRow(newRow, true);//标志要设置为true,表示添 ObjectTable.EndLoadData(); ``` +# 反射(Reflection) + +> 反射是.NET中的重要机制,通过反射可以得到\*.exe或\*.dll等程序集内部的接口、类、方法、字段、属性、特性等信息,还可以动态创建出类型实例并执行其中的方法。 +> +> 反射指程序可以访问、检测和修改它本身状态或行为的一种能力。 +> +> 程序集包含模块,而模块包含类型,类型又包含成员。反射则提供里封装程序集、模块和类型的对象。 +> +> 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。 + +通过反射获取类型 + +描述:有三种类型 + +1. 通过`typeof`获取某个值的类型 + + ```c# + System.Type personType=typeof(Person); + System.Type heroType=typeof(Framework.Hero); + ``` + +2. 通过一个对象获取该对象所对应的类的类型、 + + ```c# + Framework.hero dmxy =new Framework.hero(); + System Type=dmxy.GetType(); + ``` + +3. 通过类的名称字符串获取对应的类型 + + ```c# + System.Type strType =System.Type.GetType("Person"); + System.Type strType =System.Type.GetType("Framework.Hero"); + ``` + +## Type类 + +属性 + +- Name 数据类型名 + +- FullName 数据类型的完全限定名 + +- Namespace 定义数据类型的命名空间名 + +- IsAbstract 指示该类型是否为数组 + +- IsArray 指示该类型是否为数组 + +- IsClass 指示该类型是否为类 + +- IsEnum 指示该类型是否为枚举 + +- IsInterface 指示该类型是否为接口 + +- IsPublic 指示该类型是否为共有的 + +- IsSealed 指示该类型是否是密封类 + +- IsValueType 指示该类型是否是密封类 + +- IsValueType 指示该类型是否是值类型 + +- BaseType 父类类型 + +- AssemblyQualifiedName 程序集+命名空间+类名 | 是Type.GetType(str)中的字符串 + +```csharp +private void ShowTypeField() +{ + // 获取类型 + Type heroType = typeof(Framework.Hero); + // 查看类型的名字 + Console.WriteLine("Name:" + heroType.Name); + //查看类型的全名 + Console.WriteLine("FullName:" + heroType.FullName); + //查看程序集名称 + Console.WriteLine("Assembly:" + heroType.Assembly); + //加上程序集的全名 + Console.WriteLine("Ass-Name:" +heroType.AssemblyQualifiedName); + //获取该类型的父类 + Console.WriteLine("BaseType:" + heroType.BaseType.BaseType); +} +``` + +## 方法 + +- GetMember(),GerMembers() + +1.返回MemberInfo类型,用于取得该类的所有成员的信息 + +2.GetConstructor(),GetConstructors() -返回ConstructorInfo类型,用于取得该类构造函数的信息 + +- GetEvent(),GetEvents() + + 返回EventInfo类型,用于取得该类的事件的信息 + +- GetInterface(),GetInterfaces() + + 返回InterfaceInfo类型,用于取得该类实现的接口的信息 + +- GetField(),GetFields() + + 返回FieldInfo类型,用于取得该类的字段(成员变量)的信息 + +- GetPropeerty(),GetProperties() + + 返回ProperyInfo类型,用于取得该类的属性的信息 + +- GetMethod(),GetMethods() + + 返回MethodInfo类型,用于取得该类的方法的信息 diff --git a/source/_posts/Vue.md b/source/_posts/Vue.md index fb67d83..a3d931c 100644 --- a/source/_posts/Vue.md +++ b/source/_posts/Vue.md @@ -1861,6 +1861,78 @@ yarn | npm install [package]@[version] | yarn add [package]@[version] | 安装指定版本的包 | | npm rebuild | yarn install --force | 重新下载所有包 | +# npx + +npm大家都知道,是node的包管理器,npx虽然也见过,但似乎较少用过,那npx到底是什么呢? + +npx是npm5.2.0版本新增的一个工具包,定义为npm包的执行者,相比npm,npx会自动安装依赖包并执行某个命令。 + +假如我们要用create-react-app脚手架创建一个react项目,常规的做法是先安装create-react-app,然后才能使用create-react-app执行命令进行项目创建。 + +```shell +// 第一步 +npm i -g create-react-app +// 第二步 +create-react-app my-react-app +``` + +有了npx后,我们可以省略安装create-react-app这一步。 + +```shell +// 使用npx +npx create-react-app my-react-app +``` + +npx会在当前目录下的`./node_modules/.bin`里去查找是否有可执行的命令,没有找到的话再从全局里查找是否有安装对应的模块,全局也没有的话就会自动下载对应的模块,如上面的create-react-app,npx会将create-react-app下载到一个临时目录,用完即删,不会占用本地资源。 + +> npm自带npx,可以直接使用,如果没有可以手动安装一下:npm i -g npx + +## npx命令参数 + +### --no-install + +--no-install 告诉npx不要自动下载,也意味着如果本地没有该模块则无法执行后续的命令。 + +```shell +npx --no-install create-react-app my-react-app + +// not found: create-react-app +``` + +### --ignore-existing + +--ignore-existing 告诉npx忽略本地已经存在的模块,每次都去执行下载操作,也就是每次都会下载安装临时模块并在用完后删除。 + +### -p + +-p 用于指定npx所要安装的模块,它可以指定某一个版本进行安装: + +```shell +npx -p node@12.0.0 node index.js +``` + +-p 还可以用于同时安装多个模块: + +```shell +npx -p lolcatjs -p cowsay [command] +``` + +### -c + +-c 告诉npx所有命令都用npx解释。 + +```shell +npx -p lolcatjs -p cowsay 'cowsay hello | lolcatjs' +``` + +这样运行会报错,因为第一项命令cowsay hello默认有npx解释,但第二项命令localcatjs会有shell解释,此时lolcatjs并没有全局安装,所以就报错了。这时候可以用 -c 参数来解决。 + +```shell +npx -p lolcatjs -p cowsay -c 'cowsay hello | lolcatjs' +``` + + + # 加密解密 ## jsencrypt