delegate

C# 泛型中的数据类型判定与转换

允我心安 提交于 2020-08-04 16:24:16
提到类型转换,首先要明确C#中的数据类型,主要分为值类型和引用类型: 1.常用的值类型有:(struct) 整型家族:int,byte,char,short,long等等一系列 浮点家族:float,double,decimal 孤独的枚举:enum 孤独的布尔:bool 2.常用的引用类型有: string,class,array,delegate,interface 值得注意的是,无论是值类型还是引用类型,在C#中都派生于object,没错,这家伙就是万恶之源! 正是因为有了这一特性,于是我们才能通过装箱和拆箱愉快地将这些数据类型在值类型,object,引用类型间反复横跳。 当然了,无论是装箱和拆箱,对于性能都是有消耗的,不到万不得已的时候尽量不要用(虽然我才不管这些,只要我用的爽就行了233) 虽然一般不提倡用object类型作为函数参数,取而代之使用泛型成为首选,那么如何判断泛型参数的具体数据类型并进行有效转换呢? 比如下面的例子: 1 [System.Serializable] 2 public struct Property<T> where T : struct 3 { 4 public string Label { get ; } 5 public T Value { get ; } 6 public PropertyType Type { get ; } 7

《重构-代码整洁之道TypeScript版》第3天

自闭症网瘾萝莉.ら 提交于 2020-08-04 09:33:02
今天让我们来继续第3天,老规矩先来回顾一下昨天我们都实现了哪些: Change Reference to Value(将引用对象改为值对象) Change Value to Reference(将值对象改为引用对象) Collapse Hierarchy(折叠继承体系) (图片:博格达峰) 什么是重构 ? 简单理解就是不改变软件可观察行为的前提下,改善其内部结构,以提高理解性和降低修改成本。 1. 这是如下我们要实现的目标任务列表(每天进步一点点⏰) [x] Consolidate Conditional Expression(合并条件表达式) [x] Consolidate Duplicate Conditional Fragments(合并重复的条件片段) [x] Convert Procedural Design to Objects(将过程化设计转化为对象设计) [ ] Decompose Conditional(分解条件表达式) [ ] Duplicate Observed Data(复制“被监视数据”) [ ] Encapsulate Collection(封装集合) [ ] Encapsulate Downcast(封装向下转型) [ ] Encapsulate Field(封装字段) [ ] Extract Class(提炼类) [ ] Extract

Disruptor之ExceptionHandler

醉酒当歌 提交于 2020-07-29 09:42:13
Disruptor的版本3.4.2. List-1 public interface ExceptionHandler<T> { /** * <p>Strategy for handling uncaught exceptions when processing an event.</p> * * <p>If the strategy wishes to terminate further processing by the {@link BatchEventProcessor} * then it should throw a {@link RuntimeException}.</p> * * @param ex the exception that propagated from the {@link EventHandler}. * @param sequence of the event which cause the exception. * @param event being processed when the exception occurred. This can be null. */ void handleEventException(Throwable ex, long sequence, T event); /** * Callback to

C# 基础知识系列- 6 Lambda表达式和Linq简单介绍

家住魔仙堡 提交于 2020-07-29 07:15:13
前言 C#的lambda和Linq可以说是一大亮点,C#的Lambda无处不在,Linq在数据查询上也有着举足轻重的地位。 那么什么是Linq呢,Linq是 Language Intergrated Query (语言集成查询)的缩写,可以对本地对象 集合 或者远程数据源进行结构化的查询操作。 那什么又是Lambda呢?嗯,简单来讲就是匿名函数,我们不声明方法名,只写一个方法体,这个方法体就是lambda表达式 lambda表达式 如何写一个lambda表达式 首先,在写lambda表达式之前,需要先了解 两个特殊的类型: Func 和 Action 。 这是两个委托,这里先不急着了解什么是委托,可以把它们当做一种名称规范就行,它们都可以表示一个方法。不同的是其中 Func 表示一个有返回值的方法, Action 表示一个没有返回值的方法。C#对这两个的定义如下: public delegate TResult Func<out TResult>();//注意这里的out 表示这个泛型是返回值的类型泛型 public delegate void Action(); 其中 Func 和 Action 各有16个变种: // 注意 in 关键字,表示泛型是参数的类型约束 public delegate TResult Func<in T,out TResult>(T arg);

C# 基础知识系列- 11 委托和事件

倾然丶 夕夏残阳落幕 提交于 2020-07-29 04:43:35
0. 前言 事件和委托是C#中的高级特性,也是C#中很有意思的一部分。出现事件的地方,必然有委托出现;而委托则不一定会有事件出现。那为什么会出现这样的关系呢?这就需要从事件和委托的定义出发,了解其中的内在。 1. 委托 说起委托,就不得不回忆一下之前在Linq篇中介绍的匿名方法,其中提到了Func和Action这两个类型。这两个类型就是委托。 委托在C#中定义为一种面向对象形式的方法寻址方案。简单来讲,就是定义一个类型,然后表示这个类型代表某一种方法。而委托对象,就是方法参数化。委托可以实现将方法当做一个参数传递给另一个方法,也可以认为是反射中的MethodInfo的一种特例(实际上并没有太多关系)。 委托不关心方法叫什么,也不关心方法从哪来(归属于哪个类或者哪个对象),只关心方法需要哪些参数,返回什么类型。 说到这里,我们来看一下如何定义一个委托吧,委托的定义形式如下: delegate <返回类型> 委托名(参数列表);//参数列表代表任意个参数 由之前的定义形式,我们可以知道委托也是一种类型,所以它的定义也符合类型的定义规范。现在我们定义一个没有返回值也没有参数类型的委托作为我们创建的第一个委托: public delegate void FirstDel();// 类型名称是 FirstDel 简单的使用一下: FirstDel del ; del();// 会直接报错

.NET CORE 中间件

笑着哭i 提交于 2020-07-28 09:00:26
原文: .NET CORE 中间件 什么是中间件 对于中间件我们其实并不陌生,在.NET CORE出现之前中间件的概念在OWIN应用程序中就已经普遍使用了。 中间件官方定义: 中间件是一种集成到应用管道中间来处理请求和响应的模块,每个中间件可以: 选择是否将请求传递到管道的下一个组件 可以在管道的下一个组件前后执行工作 ASP.NETCORE中的中间件本质上是一个请求委托 Func< RequestDelegate, RequestDelegate> middleware 。 RequestDelegate本身也是一个委托,定义为 public delegate Task RequestDelegate(HttpContext Context) 。 在ASP.NETCORE请求管道中,形成一条委托链。 请求管道短路:当委托不选择将请求传递到下一个委托时,称之为“短路”。 如何创建中间件 在ASP.NETCORE中,使用 IApplicationBuilder 来创建/插入中间件管道。提供了 Run 和 Use 两类方式。依赖组件包 Microsoft.AspNetCore.Http.Abstractions Run是一种 约定 的终端管道,即短路,不再执行下一个委托 public void Configure(IApplicationBuilder app,

UITextField文本更改事件

末鹿安然 提交于 2020-07-27 23:05:48
问题: How can I detect any text changes in a textField? 如何检测textField中的任何文本更改? The delegate method shouldChangeCharactersInRange works for something, but it did not fulfill my need exactly. 委托方法 shouldChangeCharactersInRange 可以为某些事情工作,但它不能完全满足我的需要。 Since until it returns YES, the textField texts are not available to other observer methods. 因为直到返回YES,否则textField文本不可用于其他观察者方法。 eg in my code calculateAndUpdateTextFields did not get the updated text, the user has typed. 例如,在我的代码中,用户已键入, calculateAndUpdateTextFields 未获取更新的文本。 Is their any way to get something like textChanged Java event handler.

OC项目转Swift指南

情到浓时终转凉″ 提交于 2020-07-27 13:53:49
运行环境:Xcode 11.1 Swift5.0 最近参与的一个项目需要从Objective-C(以下简称OC)转到Swift,期间遇到了一些坑,于是有了这篇总结性的文档。 如果你也有将OC项目Swift化的需求,可以作为参考。 OC转Swift有一个大前提就是你要对Swift有一定的了解,熟悉Swift语法,最好是完整看过一遍官方的 Language Guide 。 转换的过程分自动化和手动转译,鉴于自动化工具的识别率不能让人满意,大部分情况都是需要手动转换的。 自动化工具 有一个比较好的自动化工具 Swiftify ,可以将OC文件甚至OC工程整个转成Swift,号称准确率能达到90%。我试用了一些免费版中的功能,但感觉效果并不理想,因为没有使用过付费版,所以也不好评价它就是不好。 Swiftify还有一个Xcode的插件 Swiftify for Xcode ,可以实现对选中代码和单文件的转化。这个插件还挺不错,对纯系统代码转化还算精确,但部分代码还存在一些识别问题,需要手动再修改。 手动Swift化 桥接文件 如果你是在项目中首次使用Swift代码,在添加Swift文件时,Xcode会提示你添加一个 .h 的桥接文件。如果不小心点了不添加还可以手动导入,就是自己手动生成一个 .h 文件,然后在 Build Settings > Swift Compiler -

[Asp.Net Core] Blazor Server Side 扩展用途

扶醉桌前 提交于 2020-07-26 01:17:09
前言 大概3个星期之前立项, 要做一个 CEF+Blazor+WinForms 三合一到同一个进程的客户端模板. 这个东西在五一的时候做出了原型, 然后慢慢修正, 在5天之前就上传到github了. 地址 : https://github.com/BlazorPlus/BlazorCefApp 但是一直在忙各种东西, 没有时间写博客. 情况 情况是这么一个情况 , 这个东西能运行, 够用. 也写了7个例子. 离当初的目标还有一些距离. 需要更多的时间去填坑. CEF方面, 是按需包装, 没有用到的功能是没处理的. 不过按照原先设想, 大部分人都不会有去定制这个CEF的需要. 测试 看这篇博文的网友, 如果不想从github下载编译, 从 http://opensource.spotify.com/ 另行下载 CEF 的资源包, 可以直接在微云上下载 已经编译好的版本 : https://share.weiyun.com/oibpnIro 项目模板 如图, 这是一个标准的 Blazor server side 工程. 有 Program.cs , 有 Startup.cs , 有 Shared/Pages, 有 wwwroot 其中引用的包是 CefLibCore , 源代码在 https://github.com/BlazorPlus/CefLite ,

NSNotification,NSNotificationCenter的使用、iOS中五种对象间传值的方式

一世执手 提交于 2020-05-09 16:08:40
学习内容 NSNitification与NotificationCenter(通知与通知中心) 通知的使用 [[NSNotificationCenter defaultCenter]addObserver:selfselector:@selector (noticeAction:) name:@"name" object:nil]; 注册观察者 NSNotification* notice = [NSNotification notificationWithName:@"name" object:nil userInfo:params]; [[NSNotificationCenter defaultCenter]postNotification:notice]; 创建一个通知并发送 观察者对象的注册一定要比通知的发送提前,否则的话会接收不到通知 通知和delegate的基本区别 通知是允许多对多的,而delegate只能是一对一的 通知的耦合度较低,发送方不需要知道通知方的任何情况,而delegate不行 通知的效率比起delegate略差 通知是同步还是异步的? postNotification:通知的发送总是会卡住当前线程,等待所有的observer对象执行(如果没有经过特殊处理,接收者对象的selector与postNotification在同一线程执行