![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c#
飞鸟慕鱼
这个作者很懒,什么都没留下…
展开
-
wpf 圆形进度条
效果图Style<Style x:Key="CircleProgressBar" TargetType="{x:Type ProgressBar}"> <Setter Property="Width" Value="100" /> <Setter Property="Height" Value="100" /> <Setter Property="Template"> <Setter.Value>原创 2021-05-19 09:22:09 · 2231 阅读 · 0 评论 -
wpf 自定义颜色滑动条获取颜色
效果图下面上代码Windows1.xaml<Window x:Class="WpfApp.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/e原创 2021-05-12 10:53:41 · 570 阅读 · 0 评论 -
WPF 等长的多个圆弧构成一个圆
效果前台代码<Grid x:Name="grid" />后台代码using System;using System.ComponentModel;using System.Windows;using System.Windows.Media;using System.Windows.Shapes;namespace WpfApp{ /// <summary> /// Window3.xaml 的交互逻辑 /// </原创 2021-05-11 16:08:20 · 224 阅读 · 0 评论 -
C# 数组
static void Main(string[] args){ #region 一维数组 int[] a1 = new int[100]; string[] a2 = new string[] { "aaa", "bbb", "ccc" }; var a3 = new double[] { 1, 2, 3 }; var a4 = new double[3] { 1, 2, 3 }; var a5 = new[] { 1, 2, 3 }; stri.原创 2021-04-24 10:58:59 · 80 阅读 · 0 评论 -
C# 事件的理解
先看事件的使用using System.Collections.Generic;namespace ConsoleApp1{ class Program { static void Main(string[] args) { Maker maker = new Maker(); Subscrib subscrib = new Subscrib(); maker.FunEven原创 2021-03-20 19:54:02 · 117 阅读 · 0 评论 -
C# 委托delegate的理解
委托的目的就是将函数能够像普通参数(string、int、bool)作为函数的参数来传递, 其实就是C中函数指针.以下全是个人的猜想, 便于理解.C#中定义一个委托, 表达式 delegate int Del(string name);delegate是一个修饰符, 我将它理解成一个模板,被delegate修饰的东西, 会被自动扩展成一个类,类似于下面的形式. 其中int(string)就相当于函数指针class Del{ private List<int(string)&原创 2021-03-12 11:20:49 · 279 阅读 · 0 评论 -
C# NutShell 第二十三章 任务并行
任务并行创建并启动任务1.指定状态对象 static void Main(string[] args) { var task = Task.Factory.StartNew(Go,"hello"); task.Wait(); var task2 = Task.Factory.Sta...原创 2019-11-14 21:57:13 · 142 阅读 · 0 评论 -
Asp.Net Core MemoryCache
MemoryCache主要几种用法Get:获取key=name的valueGetOrCreate,GetOrCreateAsync:如果key=name的value存在,则获取,不存在则设置一对新的Set:设置key=name的valueTryGetValue:判断key=name是否存在,存在则返回true,不存在则返回false。同时将结果赋给一个值。Get ...原创 2019-11-12 08:40:18 · 1060 阅读 · 0 评论 -
C# NutShell 第二十二章高级线程处理
排它锁排它锁三种:lock,Mutex,SpinLock排它锁锁住的是代码块,而不是代码块里面的变量。当别的线程也想要使用这一部分代码时,就需要判断这个锁可不可以用。lock语句 class ThreadSafe { static readonly object _locker = new object(); static int _...原创 2019-11-09 23:10:20 · 198 阅读 · 0 评论 -
C# NutShell 第二十一章 安全
散列法1.Encoding.UTF8.GetBytes将一个字符串变成字节数组2.Encoding.UTF8.GetString将一个字节数组转变成字符串3.Convert.ToBase64String将一个字节数组以Base64编码的方式展现成字符串,本质上是字节数组4.FromBase64String将一个Base64编码的字符串转成字节数组,本质上是字节数组5.MD5.C...原创 2019-11-06 22:46:18 · 166 阅读 · 0 评论 -
C# NutShell 第二十章 动态编程
数值统一类型1.使用dynamic类型,编译时不会有错误,但是运行时如果类型错误,会报异常。2.通常的做法是用泛型来约束类型(参数和返回值),在方法内部转成dynamic进行计算,最后再转回来。3.由于最后再转回来的时候,会造成值损失,所以另外的办法就是重载多重类型 static T Mean<T>(T a, T b) { ...原创 2019-11-05 22:18:30 · 148 阅读 · 0 评论 -
C# Nut Shell 第十九章 反射和元数据
反射和激活类型获取类型1.GetType()和typeof都可以获取类型,GetType是在运行时,而typeof是在编译时2.可以在获取一个基础类型后再构造其他类型 Type simpleArray = typeof(int).MakeArrayType(); Console.WriteLine(simpleArray == typ...原创 2019-11-01 22:18:50 · 208 阅读 · 0 评论 -
Autofac
注册组件using Autofac;using System;namespace ConsoleApp{ class Program { //建立容器 private static IContainer Container { get; set; } static void Main(string[] args) ...原创 2019-11-01 15:54:07 · 140 阅读 · 0 评论 -
Asp.Net Core DI IoC
IoC:控制反转。在一个有层级的结构中,上层依赖下层,下层的改变会影响上层。控制反转就是将自上而下的依赖链部分反转。由A->B,转变为A->Interface<-B。从中间抽象出一层来,上下2层都依赖他。只要中间这一层不变,则2端可以自由发挥。DI:依赖注入。虽然自己依赖某个类的运行,但是自己不主动去生成某个实例,而是由调用者去生成(将依赖由自己生成变成外部注入)。自己只需要...原创 2019-10-31 15:29:51 · 162 阅读 · 0 评论 -
C# NutShell 第十七章 序列化
序列化的概念1.序列化是将内存中的对象或者对象图(一组相互引用的对象)拉平为一个可以保存或传输的字节流,或者XML节点。2.反序列化与序列化相反3.序列化一般用于网络或程序边界传输,文件或数据库保存4.克隆对象序列化引擎1.数据契约序列化器2.二进制序列化器3.XML序列化器4.IXmlSerializable接口格式化器格式化器会根据特定的媒介或序列化...原创 2019-10-29 22:08:27 · 354 阅读 · 0 评论 -
Asp.Net Core JsonPatch使用
实体类 public class School { public string Location { get; set; } public string Country { get; set; } public List<Student> Students { get; set; } } public...原创 2019-10-28 16:42:30 · 309 阅读 · 0 评论 -
Asp.Net Core 高级-URL重写
URL重定向和重写1.URL重定向涉及客户端操作,指示客户端访问与客户端最初请求不同的资源,返回客户端的重定向地址会出现在浏览器中。301和302都是重定向。301表示永久,则客户端会缓存这个重定向地址302表示临时,客户端不会缓存,临时访问2.URL重写是服务端操作,从与客户端请求的资源不同的资源地址提供资源。重写的URL不会返回客户端。扩展和选项使用重定向中间件,规...原创 2019-10-28 13:34:13 · 1226 阅读 · 0 评论 -
Asp.Net Core 高级-编写中间件
中间件类app.Use,app.Map也算中间件,这是用委托来实现的中间件。可以将委托写到另外的类中。1.创建中间件类 public class RequestCultureMiddleware { private readonly RequestDelegate _next; public RequestCultureMiddlewar...原创 2019-10-28 10:38:57 · 205 阅读 · 0 评论 -
Asp.Net Core 高级-模型验证
模型状态1.模型状态表示2个子系统的错误:模型绑定和模型验证模型绑定错误:数据类型不匹配模型验证:不符合业务规则2.模型验证使用ModelState.IsValid3.使用[ApiController]则无需ModelState.IsValid,会直接返回HTTP 400 public async Task<IActionResult> Text...原创 2019-10-28 10:13:10 · 1398 阅读 · 0 评论 -
Asp.Net Core Web Api 路由传参探幽
声明0.本人的结论都是经过测试得出的,某些情况会可能会忽略而导致结论错误,请指正!1.关于模型绑定(将HTTP请求中各种可能的参数映射到接口中的简单类型或者复杂类型)的相关问题可以查看我的另外一篇博客,或者去微软官网模型绑定模型绑定官网2.在模型绑定这篇文章中主要是讲如何将一个类型映射到另外的一个类中。2.1 简单类型-简单类型 int-int string-string...原创 2019-10-26 17:02:19 · 1366 阅读 · 0 评论 -
Asp.Net Core 高级-自定义模型绑定
ByteArrayModelBinder1.Asp.Net Core实现了base64编码的字节到byte[]的转化。2.可以使用query,form传递,body无法传递普通键值对:query,form文件键值对:formJson:Body自定义模型绑定器不采用[Attribute]的方法建立一个绑定器,设置绑定规则1.确定需求,例如修改一个string的规则...原创 2019-10-25 15:48:23 · 1409 阅读 · 0 评论 -
Asp.Net Core 高级-模型绑定
模型绑定定义1.从各种源(路由、表单、查询字符串)中检索数据2.将数据提供给方法参数和公共属性中的控制器3.将字符串类型转换为.Net数据4.更新复杂类型的属性一般步骤1.查找方法的第一个参数,得到它的类型和名称2.查找HTTP的可用源,查找符合名称的数据3.将该数据转换为该参数的类型4.依次类推注意:名称不区分大小写5.调用这个方法,并将所有转换好...原创 2019-10-25 11:37:47 · 1797 阅读 · 0 评论 -
C# NutShell 第十六章 网络
地址与端口 var a1 = new IPAddress(new byte[] { 101,102,103,104}); var a2 = IPAddress.Parse("101.102.103.255"); var p1 = new IPEndPoint(a1, 200);URI1.URI分为3部分,协议(sc...原创 2019-10-25 23:38:52 · 653 阅读 · 0 评论 -
Asp.Net Core Web体系结构设计
干净体系结构1.应用程序内核不依赖其他任何应用程序2.UI层和基础结构层均依赖于内核,但是彼此并不互相依赖3.UI层在编译时依赖的是内核层,在运行时,依赖的是基础结构层Asp.Net Core体系结构关系图采用干净体系结构排列代码应用程序内核(Application Core)实体服务接口DTO基础结构类型(Infrastructure ty...原创 2019-10-24 10:33:29 · 525 阅读 · 0 评论 -
Asp.Net Core Web Api应用
概述ControllerBase类ControllerBase针对Web Api,而Controller针对Web View,除非一个Controller同时需要Web Api和Web ViewApiController 属性1.属性路由要求2.自动HTTP 400响应3.绑定源参数推理4.Multipart/form-data 请求推理5.错误状态代码的问题详细信...原创 2019-10-23 14:10:31 · 475 阅读 · 0 评论 -
ASP.NET Core 基础知识
Startup类Startup类1.ConfigureServices:配置(注册)引用的服务。服务是一个提供应用功能的可重用组件2.Configure:创建应用的请求处理管道3.在应用启动时,ANC运行时会调用ConfigureServices和Configure4.主机提供Startup类构造函数可用的某些服务,应用通过ConfigureServices添加其他服务,主机和...原创 2019-10-22 10:40:06 · 1161 阅读 · 0 评论 -
C# NutShell 第十五章 流与I/O
.NET流的架构1.架构主要包含3个概念:后台存储,装饰器,适配器2.后台存储是输入输出的终结点,支持顺序读取字节的源,支持顺序写入字节的目标3.Stream流支持标准的读写及定位方法,流不会讲直接将数据存储在内存中,而是以每次一个字节或者每次一块数据的方式按照顺序处理数据。所以无论后台存储的大小如何,流只会占用很少的内存。4.后台存储流:与特定的后台存储类型链接的流,FileSt...原创 2019-10-21 22:19:03 · 253 阅读 · 0 评论 -
C# NutShell 第十四章 并发与异步
线程创建线程1.线程时一个可以独立执行的执行路径2.在同一个进程中多个线程会共享内存3.在单核计算机中,操作系统会为每一个线程划分时间片来模拟并发执行4.在多核心的计算机中,线程是真正的并行的5.线程是抢占式的,需要和其他代码竞争6.线程一旦启动,IsAlive属性就会返回true,直至线程停止。线程停止后就无法在启动了7.设置线程的名称属性在调试时可以在调试栏看到...原创 2019-10-18 23:29:34 · 192 阅读 · 0 评论 -
C# Nut Shell 第十二章 销毁对象与垃圾回收
IDisposable接口、Dispose方法和Close方法using语句提供了调用实现了IDisposable接口对象的Dispose方法的快捷方法。相当于实现了try/finally语句标准销毁语义1.对象一旦被销毁就无法恢复,调用方法会异常2.可以重复调用Dispose,不会报错3.会自动循环调用Dispose4.一般非托管代码都需要销毁代码来释放资源,文件,套接字...原创 2019-10-08 09:41:31 · 261 阅读 · 0 评论 -
C# Nut Shell 第十三章 诊断
条件编译1.#if:若特定的符号没有定义,则编译器将忽略该部分代码2.特定代码可以使用#define定义,类似于C++的宏,但是该条指令必须位于文件的最前面,比using还要前面。3.#if中也可以使用|| && !等操作符4.#else和else差不多,不符合#if就执行这里面的代码5.#define普通的定义方法只能定义一个属于单个文件的宏,要定义一个全局的...原创 2019-10-09 22:53:16 · 116 阅读 · 0 评论 -
C# Nut Shell 第十一章 其他XML技术
"<custom id='123' status='archived' >" + "<firstname>123</firstname>" + "<lastname>bin" + "<firstname>zhang</first...原创 2019-10-10 09:41:29 · 155 阅读 · 0 评论 -
C# IN Depth 第九章 Lambda表达式和表达式树
作为委托的Lambda表达式 Func<int> func = delegate() { return 1; }; Func<int,int> func2 = delegate (int x) { return x+1; }; Func<int> func3 = () => 1;...原创 2019-09-11 14:10:23 · 147 阅读 · 0 评论 -
C# 设计模式-策略模式
策略模式-定义了算法族,分别封装起来,让它们相互之间可以替换。对于客户的可能变化的行为采用组合的方式而非继承的方式。组合可以更加灵活的使用,而继承应对接口变化时太过繁琐。下面用代码说明:先定义一个抽象基类Car,所有实体车都要继承这个抽象基类 public abstract class Car { //能跑 public void R...原创 2019-08-28 11:32:41 · 181 阅读 · 0 评论 -
C# Nut Shell 第十章 LINQ to XML
X-DOM概述1.XML文档的每一个部分(声明、元素、属性、值和文本)都可以用类来表示,如果使用集合属性来存储子内容,可以用一颗对象树完整地表示整个文档,这就叫文档对象模型(document object model)2.LINQ to DOM,两部分组成:X-DOM,查询符3.XDocument是XML树的根节点,封装了根XElement。XElement就表示当前节点,XNode就...原创 2019-09-25 22:59:58 · 241 阅读 · 0 评论 -
.net core nuget 包警告 NU1701
在使用nuget添加一个包时,出现NU1701的警告出现如下错误警告 NU1701 已使用“.NETFramework,Version=v4.6.1”而不是项目目标框架“.NETCoreApp,Version=v2.1”还原包“EntityFramework 6.2.0”。此包可能与项目不完全兼容。 表示项目不兼容,此时需要我们我已.net core的版本nu...原创 2018-12-14 21:48:16 · 9170 阅读 · 2 评论 -
C# IN Depth 第一章 C#开发的进化史
从简单的数据类型开始C# 1 public class Product { private string name; public string Name { get { return name; } set { name = value; } } pri...原创 2019-09-05 09:38:56 · 226 阅读 · 0 评论 -
C# Nut Shell 第四章 高级特性
委托delegate:函数指针多播委托:可以引用一个或者一组方法。如果返回值不是null,则只会保留最后一个方法的返回值,其余的被丢弃。Func:有返回值Action:没有返回值相同签名的委托是互不相同的委托也有协变和逆变事件标准事件模式 EventArgs,可以看委托事件事件也可以是virtual,override,abstract,sealedLambd...原创 2019-09-04 23:47:20 · 215 阅读 · 0 评论 -
C# 设计模式-外观模式
外观模式就是将一个互相耦合严重的系统分成2块。一块仍旧是耦合严重,但是会暴露出一个统一的接口。而另一块只与暴露的统一接口联系,降低了耦合。将原本依赖于一个复杂系统的上层应用变成依赖于一个统一的接口,但正如上面所说,这个接口的外部看起来是和很美好的,内部任然是混乱的。下面看实际的例子:我们要看一部电影,我们就得通过遥控器来控制我们的电视和DVD控制我们的说有操作,所以看起来是这个...原创 2019-09-04 11:26:11 · 91 阅读 · 0 评论 -
C# 设计模式-命令模式
命令模式:将每一个方法都封装成一种命令,调用只需要调用固定的接口就可以,而不需要调用原来的方法。先定义实体类 public class Light { public Light(string name) { Name = name; } string Name { get; set; ...原创 2019-09-04 10:53:12 · 120 阅读 · 0 评论 -
C# 设计模式-单例模式
单例模式:确保一个类只有一个实例,并能够提供一个全局访问点线程不安全 public class Singleton { private static Singleton _singletonInstance; private Singleton() { } public static Si...原创 2019-09-04 10:06:10 · 87 阅读 · 0 评论