This commit is contained in:
YUN-PC5\user 2023-09-14 10:28:46 +08:00
parent 941bd1526f
commit 6ceb1ba7e8
3 changed files with 191 additions and 9 deletions

View File

@ -404,13 +404,13 @@ public ResultUtil GetUserInfo()
三大拦截器 三大拦截器
`AuthorizeAttribute`
认证拦截器
`ActionFilterAttribute` 认证拦截器 `AuthorizeAttribute`
方法拦截器
方法拦截器 `ActionFilterAttribute`
```c# ```c#
using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.AspNetCore.Mvc.Controllers;
@ -542,6 +542,6 @@ builder.Services.AddScoped<AuthFilter>();
`ExceptionFilterAttribute`
异常拦截器
异常拦截器 `ExceptionFilterAttribute`

View File

@ -103,7 +103,6 @@ using System.Data;
DataTable dt = new DataTable(); DataTable dt = new DataTable();
//创建一个名为"Table_New"的空表 //创建一个名为"Table_New"的空表
DataTable dt = new DataTable("Table_New"); DataTable dt = new DataTable("Table_New");
``` ```
## 列 DataColumn ## 列 DataColumn
@ -138,10 +137,9 @@ workTable.PrimaryKey = columns;
//比如 表达式类型 示例 //比如 表达式类型 示例
// 比较 “总计 >= 500” // 比较 “总计 >= 500”
// 计算 "UnitPrice * Quantity" // 计算 "UnitPrice * Quantity"
// 聚合 Sum(Price) // 聚合 Sum(Price)
workTable.Columns.Add("Total", typeof(Double)); workTable.Columns.Add("Total", typeof(Double));
workTable.Columns.Add("SalesTax", typeof(Double), "Total * 0.086"); workTable.Columns.Add("SalesTax", typeof(Double), "Total * 0.086");
``` ```
## 复制DataTable ## 复制DataTable
@ -196,3 +194,115 @@ myRow = ObjectTable.LoadDataRow(newRow, true);//标志要设置为true,表示添
ObjectTable.EndLoadData(); 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类型用于取得该类的方法的信息

View File

@ -1861,6 +1861,78 @@ yarn
| npm install [package]@[version] | yarn add [package]@[version] | 安装指定版本的包 | | npm install [package]@[version] | yarn add [package]@[version] | 安装指定版本的包 |
| npm rebuild | yarn install --force | 重新下载所有包 | | npm rebuild | yarn install --force | 重新下载所有包 |
# npx
npm大家都知道是node的包管理器npx虽然也见过但似乎较少用过那npx到底是什么呢
npx是npm5.2.0版本新增的一个工具包定义为npm包的执行者相比npmnpx会自动安装依赖包并执行某个命令。
假如我们要用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-appnpx会将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 ## jsencrypt