clr via c# delegate】的更多相关文章

1,委托列子 internal delegate void Feedback(int value); class DelegateRef { public static void StaticDelegateDeomo() { Console.WriteLine("---------------static delegate Demo ------------"); Counter(1, 3, null); Counter(1, 3, FeedBackToConsole); Count…
上一章地址 API版本 具有字符串参数的API通常有两种版本 GetWindowText GetWindowTextA GetWindowTextW 缺省情况下CLR会自动寻找合适的匹配 CharSet=Ansi时寻找A版本 CharSet=Unicode寻找W版本 CharSet=Auto和平台相关 DLLImportAttribute(ExactSpelling=true)会关掉这种行为 Ref/Out参数 (C#关键字) out=[Out]& C#:out int a IL:[Out] i…
Lua是一种很好的扩展性语言,Lua解释器被设计成一个很容易嵌入到宿主程序的库.LuaInterface则用于实现Lua和CLR的混合编程. (一)Lua from the CLR 测试环境:在VS2010中建一个C#控制台应用程序,并添加LuaInterface.dll的引用(安装LuaForWindows或直接下载LuaInterface都可得到该文件). LuaForWindows下载地址:http://luaforge.net/projects/luaforwindows/ LuaInt…
原文1:[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我地博客地址是blog.csdn.net/qinyuanpei.如果提到游戏开发,大家一定会想到C/C++.DirectX.OpenGL等这些东西,可是众所周知,游戏行业是一个需求变化极快地行业,如果我们采用编译型的语言,那么我们可能很难跟上这个时代的步伐,因为编译型的语言每经历一次重大地更新,整个项目都需要重新编译,这样无疑会影响我们的开发效率.那么,有没有一种更…
LuaInterface简单介绍 Lua是一种非常好的扩展性语言.Lua解释器被设计成一个非常easy嵌入到宿主程序的库.LuaInterface则用于实现Lua和CLR的混合编程. (一)Lua from the CLR 測试环境:在VS2010中建一个C#控制台应用程序.并加入LuaInterface.dll的引用(安装LuaForWindows或直接下载LuaInterface都可得到该文件). LuaForWindows下载地址:http://luaforge.net/projects/…
ILRuntime: https://github.com/Ourpalm/ILRuntime Demo: https://github.com/Ourpalm/ILRuntimeU3D 中文在线文档: https://ourpalm.github.io/ILRuntime/public/v1/guide/index.html Mono: https://www.mono-project.com/ 主工程: void OnHotFixLoaded() { appdomain.Invoke("Ho…
本来按照进度应该学习事件了,可总觉得应该委托在前,事件在后,才好理解. 委托是一个类,它提供了回调函数机制,而且是类型安全的.使用委托可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,提高了程序的可扩展性. 使用委托 老规矩,先上个例子: 结果: 几点说明: 使用关键字delegate声明委托.委托是类型安全的,定义时其返回值类型.参数个数及参数类型要和想要调用的方法兼容. 在这个例子中,通过Introduce方法获取对delegateIntroduce委托对象的引用.委…
终于讲到泛型了.当初看到这个书名,最想看的就是作者对泛型,委托,反射这些概念的理解.很多人对泛型的理解停留在泛型集合上,刚开始我也是,随着项目越做越多,对待泛型的认识也越来越深刻. 泛型的概念:泛型是一种特殊的类型,它把指定类型的工作推迟到客户端代码声明并实例化类或方法的时候进行. 泛型的优势:源代码保护.类型安全.更加清晰的代码.更佳的性能. 原理:(关键字:开放类型,封闭类型)所有带泛型参数的类型都是一个开放式类型,它不能被实例化(类似接口),在具体使用时生成封闭类型(实际数据类型). 泛型…
第19章 可空类型 1)使用Nullable<T>可将int32的值类型设置为Null,CLR会在Null时默认赋值为0; 如:Nullable<T> x=null; //使用x. GetValueOrDefault() 2)也可使用?代替,如下: Point? pt = null;//new Point(); int x1 = pt.GetValueOrDefault().X; int y1 = pt.GetValueOrDefault().Y; 3)注意使用可空实例IL会生成大…
   Kinds of methods        Constructors      Type constructors      Overload operators      Type conversions (for implicit and explicit casting)      Extension methods      Partial methods.              1. Instance Constructors and Classes (Reference…
C#本质论和CLR via C#两本好书,周老师可能是俗务缠身,太忙了吧,翻译得只能让人呵呵了. 你要是忙,别接那么多活好不啦. 现在都在说供给侧改革,都在大力提倡工匠精神,我们做技术的,还是踏实点好,对不啦? 对照一下李建忠老师翻译的那一版CLR via C#,差距啊. 这里,仅把随手发现的几个问题记录一下,作为例子. 其实,在这两本中译本中,类似下面的翻译失当的例子随处可见.如果你不深究,也就无所谓了,但如果你是认认真真地在学习这两本书,这种无处不在的瑕疵,极度影响阅读感受,甚至影响对原作者…
We were unable to locate this content in zh-cn. Here is the same content in en-us. .NET The CLR's Thread Pool Jeffrey Richter   Contents The Birth of the Thread Pool Capability 1: Calling a Method Asynchronously Capability 2: Calling a Method at Time…
在写delegate的时候遇到一个问题,在已有一个不带参数的delegate基础上,试图再增加一个带参数的delegate,结果VS报了“already contains a definition for ‘InvokeDelegate’”这样的错误. 第一眼看上去,代码似乎没什么问题: private delegate void InvokeDelegate(); private delegate void InvokeDelegate(string param); 其实这是把delegate…
原文: Drill Into .NET Framework Internals to See How the CLR Creates Runtime Objects 文章讨论了: SystemDomain, SharedDomain和Default Domain 对象布局和其他的内存细节 方法表布局 方法分派 文章使用的技术: .NET Framework C# 因为公共语言运行时(CLR)即将成为在Windows上创建应用程序的主角级基础架构, 多掌握点关于CLR的深度认识会帮助你构建高效的,…
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DelegateTest { class Program { delegate void DelegateGreeting(string name); static void EnglishGreeting(string name) { Console.WriteLine("Hello {0}",…
CLR环境中给我们内置了几个常用委托Action. Action<T>.Func<T>.Predicate<T>,一般我们要用到委托的时候,尽量不要自己再定义一 个委托了,就用系统内置的这几个已经能够满足大部分的需求,且让代码符合规范.一.Action Action封装的方法没有参数也没有返回值,声明原型为: 1 public delegate void Action(); 用法如下: public void Alert() { Console.WriteLine(&q…
#1 垃圾回收平台的基本工作原理: 访问一个资源所需的具体步骤: 1)调用IL指令newobj,为代表资源的类型分配内存.在C#中使用new操作符,编译器就会自动生成该指令.2)初始化内存,设置资源的初始状态,使资源可用.类型的实例构造器负责设置该初始状态.3)访问类型的成员(可根据需要反复)来使用资源.4)摧毁资源的状态以进行清理.正确清理资源的代码要放在Finalize, Dispose和Close方法.5)释放内存.垃圾回收器独自负责这一步. 托管堆如何知道应用程序不再用一个对象? 托管堆…
泛型就像是一个模板,常常定义一些通用的算法,具体调用时再替换成实际的数据类型,提高了代码的可重用性. 一.初识泛型 1. 简单实例 以最常用的FCL中的泛型List<T >为例: static void Main(string[] args)       {           List<int> num = new List<int>();           num.Add(1);           num.Add(3);           int num1 =…
第1章 CLR的执行模型 托管模块的各个组成部分:PE32或PE32+头,CLR头,元数据,IL(中间语言)代码. 高级语言通常只公开了CLR的所有功能的一个子集.然而,IL汇编语言允许开发人员访问CLR的所有功能. JITCompiler函数负责将一个方法的IL代码编译成本地CPU指令.由于IL是“即时”(just in time)编译的,所以通常将CLR的这个组件称为JITter或者JIT编译器. Microsoft定义了一个“公共语言规范”(Common Language Specific…
使用泛型的好处是“代码重用”,极大的提高了开发效率,泛型为开发者提供了以下优势: 1,源代码保护  算法的源代码不需要提供给使用泛型算法的开发人员,使用c++模板的泛型技术需要提供.(目前c++模板的泛型技术了解较少) 2,类型安全    给泛型算法指定类型时,编译器能理解开发者意图,只有兼容类型能通过,不兼容的时候编译时候会报错. 3,更清晰的代码  由于编译器强制类型的安全性,减少源代码中必须进行的转型次数,使得代码容易维护和编写.例如:DateTime dt=dtList[0];从Date…
1.什么是委托?委托就是一种回调函数的机制,将函数作为一个参数传递给其他对象,当该对象需要的时候调用委托来达到回调函数的目的. 通俗点的说法是:你将一件事情交给别人去做.例如你QQ里的自动回复,为了第一时间回复别人,你不可能一直守在QQ面前一有消息通知你就回复.所以你只好定义一个回复的方法,将这个方法交给QQ,告诉QQ当有消息过来的时候就调用你这个方法.QQ会给你这个方法传一个参数"对不起,我现在很忙balabala...",然后自动回复给对方 ====================…
每个应用程序都要使用这样或者那样的资源,比如文件.内存缓冲区.屏幕空间.网络连接.数据库资源等.事实上,在面向对象的环境中,每个类型都代表可供程序使用的一种资源. 要使用这些资源,必须为代表资源的类型分配内存.   访问一个资源所需的具体步骤如下: #1,调用IL指令newobj, 为代表资源的类型分配内存.C#中使用new操作符,编译器就会自动生成该指令. #2,初始化内存,设置资源的初始状态,使资源可用.类型的实例构造器负责设置该初始状态. #3,访问类型的成员(可根据需要反复)来使用资源.…
事件处理实际上是一种具有特殊签名的delegate, 像这个样子:public delegate void EventHandler(object sender, EventArgs e);   类型定义事件成员,就可以通知其他对象发生了特定的事情.如果定义一个事件成员,意味着类型要提供一下能力: #1,方法可登记也可注销它对该事件的关注 #2,该事件发生时,登记了的方法会收到通知.   类型之所以能够提供事件通知功能,是因为类型维护了一个已经登记方法的列表.事件发生后,类型将通知列表中所有已登…
编程语言的基元类型   某些数据类型如此常用,以至于许多编译器允许代码以简化的语法来操纵它们. System.Int32 a = new System.Int32();  // a = 0 a = 1;   等价于: int a = 1; 这种语法不仅增强了代码的可读性,其生成的IL代码与使用System.Int32时生成的IL代码是完全一致的.   编译器直接支持的数据类型称为基元类型(primitive type).基元类型直接映射到Framework类库(FCL)中存在的类型.如C#中,i…
目录 理解垃圾回收平台的基本工作原理 垃圾回收算法 垃圾回收与调试 使用终结操作来释放本地资源 对托管资源使用终结操作 是什么导致Finalize方法被调用 终结操作揭秘 Dispose模式:强制对象清理资源 使用实现了Dispose模式的类型 C#的using语句 手动监视和控制对象的生存期 对象复活 代 线程劫持 大对象 一.理解垃圾回收平台的基本工作原理 值类型(含所有枚举类型).集合类型.String.Attribute.Delegate和Event所代表的资源无需执行特殊的清理操作.…
一.CLR线程池基础 前面说过,创建和销毁线程是一个比较昂贵的操作,太多的线程也会浪费内存资源.由于操作系统必须调度可运行的线程并执行上下文切换,所以太多的线程还有损于性能.为了改善这个情况,CLR使用了代码来管理它自己的线程池.可将线程池想像成可由你的应用程序使用的一个线程集合.每个进程都有一个线程池,它在各个应用程序域(AppDomain)是共享的.     CLR初始化时,线程池是没有线程的.在内部,线程池维护了一个操作请求队列.应用程序想执行一个异步操作时,就调用某个方法,将一个记录项(…
一.Windows为什么要支持线程 Microsoft设计OS内核时,他们决定在一个进程(process)中运行应用程序的每个实例.进程不过是应用程序的一个实例要使用的资源的一个集合.每个进程都赋予了一个虚拟地址空间,确保一个进程使用的代码和数据无法由另一个进行访问.这样就确保了应用程序集的健壮性,因为一个进程无法破坏另一个进程里的数据和代码.另外,进程是无法访问到OS的内核代码和数据. 如果一个应用程序进入死循环时,如果只是单核的CPU的,它会无限循环执行下去,不能执行其他代码,这样会使系统停…
    回调函数是一种非常有用的编程机制,它已经存在很多年了.Microsoft .NET Framework通过委托(delegate)来提供一种回调机制.不同于其他平台(比如非托管C++)的回调机制,委托提供了多得多的功能.例如,委托确保回调方法是类型安全的(这是CLR最重要的目标之一).委托还允许顺序调用多个方法,并支持调用静态方法和实例方法.   一.初识委托     为了理解委托,先看看如何使用它.     委托4个最基本的步骤:     1)定义委托类型     2)有一个方法包含要…
泛型(generic)是CLR和编程语言提供一种特殊机制,它支持另一种形式的代码重用,即"算法重用". 简单地说,开发人员先定义好一个算法,比如排序.搜索.交换等.但是定义算法的开发人员并不设定该算法要操作什么数据类型:该算法可广泛地应用于不同类型的对象.然后,另一个开发人员只要指定了算法要操作的具体数据类型,就可以使用这个现成的算法了. 泛型有两种表现形式:泛型类型和泛型方法. 泛型类型:大多数算法都封装在一个类型中,CLR允许创建泛型引用类型和泛型值类型,但不允许创建泛型枚举类型.…
一. 设计要公开事件的类型 如果类型定义了事件成员,那么类型(或类型实例)就可以通知其他对象发生了一些特定的事情. 例如,Button类提供了一个名为Click的事件.应用程序中的一个或多个对象可能想接受这个事件的通知,以便在Button被单击之后采取某些操作.事件就是实现这种交互的类型成员. 如果定义了一个事件成员,意味着类型要提供一下能力: 1)方法可登记它对该事件的关注. 2)方法可注销它对该事件的关注. 3)该事件发生时,登记了的方法会受到通知.   类型之所以能提供事件通知功能,是因为…