首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C#语法——事件,逐渐边缘化的大哥。

我们在C#编写框架时,几乎不用委托的多播,因为委托的多播和事件存在严重的二义性。虽然编写框架的人学会了使用委托的多播,但使用框架的同事可能并还不太熟练,而且C#框架中,大多是使用事件来进行多播的。...比如, 你定义了一个委托,另一个开发者用这个委托做了个多播,当第三个开发者来维护这段代码时,如果他是新手,不了解委托的多播,那就很有可能只修改了委托调用的代码。而没有去同步多播这个委托的代码。...那么,事件和委托到底是什么关系呢? 事件委托的确存在千丝万缕的关系,怎么讲都是正确的。但,C#开发者只需要记住,他们俩没关系即可。在C#事件是事件,委托委托。...两者就如同int和string一样,没有任何关系。 原因很简单,学习的过程中尽量降低概念混淆。而且,在C#开发中,好的架构者也通常会将事件和委托分离,所以,就认为事件和委托没有关系即可。...C#语法——元组类型 C#语法——泛型的多种应用 C#语法——awaitasync的正确打开方式 C#语法——委托,架构的血液 C#语法——事件,逐渐边缘化的大哥。 我对C#的认知。

1.4K30
您找到你想要的搜索结果了吗?
是的
没有找到

C# 7.3新特性一览

通过一个相对较小的版本,C# 7.3解决了一些自C# 1和2以来长期悬而未决的问题。 重载解析 从C# 1.0开始,重载解析规则的设计就相当有问题。...根据这些错误选出的方法的优先级,编辑器要么会报没有匹配的方法,要么会报匹配不明确。 C# 7.3把其中部分检查移到了重载解析期间,而不是重载解析之后,这样,错误的匹配就不会导致编译器错误。...对于方法组转换,那些返回类型委托的返回类型不一致的候选方法会被从候选集中移除。 泛型约束:枚举、委托和非托管 自C# 2.0引入泛型以来,开发人员就一直在抱怨,无法把一个泛型类型指定为枚举。...根据这些错误选出的方法的优先级,编辑器要么会报没有匹配的方法,要么会报匹配不明确。 C# 7.3把其中部分检查移到了重载解析期间,而不是重载解析之后,这样,错误的匹配就不会导致编译器错误。...对于方法组转换,那些返回类型委托的返回类型不一致的候选方法会被从候选集中移除。 泛型约束:枚举、委托和非托管 自C# 2.0引入泛型以来,开发人员就一直在抱怨,无法把一个泛型类型指定为枚举。

1.1K30

UWP WinUI3 传入 AddHandler 的 RoutedEventHandler 类型事件所需不匹配将抛出参数异常

本文记录一个 UWP 或 WinUI3 的开发过程中的问题,当开发者调用 AddHandler 时,所需的 Handler 参数类型为 RoutedEventHandler 类型,然而实际上正确类型是需要与所监听事件匹配才能符合预期工作...,否则将抛出缺乏信息的参数异常 开始之前先惯例吐槽一下,我从 2015 开始开发 UWP 应用,然而到 2024 的时候,依然没有看到开发体验上的优化。...这一点也是制约了 WinUI 3 的生态,但这一点又是属于 WinUI 3 的基础设计的问题,预估难以更改 这一次的错误信息里面在 Data 里面还包含几条看似没有用,实际也没有用的信息,分别如下 +...通过查阅文档或者是在 VisualStudio 里面点点看,就可以看到对应的事件的定义,如下面代码就是 PointerPressed 的定义,可以看到事件是 PointerEventHandler 类型的委托...常见的错误都在于更改代码的时候,忘记同步更改对应的委托类型 额外补充一点,以上的代码的 handler 局部变量是安全的,不会被回收,原因是虽然在以上代码里面看起来 handler 局部变量没被引用,然而在

14810

c#面试题抽象类和接口的区别-金三银四面试:C#程序员经常遇到的30道基础面试题,想你所想

10、没有经过装箱的对象可不可以拆箱?   11、C#中有没有静态构造函数,如果有是做什么用的?   12、在C#中如何实现多态?   13、什么是反射?如何实现反射?   ...14、请解释流文件有什么不同?   15、程序集命名空间有什么不同?   16、请编写一个捕获所有异常的异常处理代码?   17、委托事件是什么关系?为什么要使用委托?   ...22、C#没有运算符重载?能否使用指针?   23、C#中有很多类被定义为public有什么意义?   24、修饰符有什么含义?   ...try { ... } catch( ) { ... }   17、委托事件是什么关系?为什么要使用委托?   委托提供了封装方法的方式,事件是某动作已发生的说明,事件是建立于委托之上的。   ...22、C#没有运算符重载?能否使用指针?   重载操作符意味着使该操作符具有不同的行为,使用操作符可以使方程式简单易懂。C# 允许用户定义的类型通过使用 关键字定义静态成员函数来重载运算符。

1.9K20

.NET中那些所谓的新语法之三:系统预定义委托Lambda表达式

(1)先来看看FindAll的定义: // // 摘要: // 检索指定谓词定义的条件匹配的所有元素。...// // 返回结果: // 如果找到,则为一个 System.Collections.Generic.List,其中包含指定谓词所定义的条件相匹配的所有元素...此委托由 Array 类的 Sort(T[], Comparison) 方法重载和 List 类的 Sort(Comparison) 方法重载使用,用于对数组或列表中的元素进行排序...5.1.1 Lambda表达式要点     ①Lambda表达式中的参数列表(参数数量、类型和位置)必须委托匹配;     ②表达式中的参数列表不一定需要包含类型,除非委托有ref或out关键字(此时必须显示声明...参考文章   (1)金旭亮,《C#面向对象程序设计》,教案6-委托事件讲义:http://download.csdn.net/detail/bitfan/3324733   (2)MSDN,泛型委托

76830

C# TextBox 扩展方法数据验证

查看公司项目代码时,存在这样一个问题:winform界面上有很多信息填写,提交后台服务器更新,但数据的合法验证及值的转换却不太敢恭维,一堆的if判断和转换,便想着是否能扩展个方法出来,琢磨出个思路,记录下来大家共同探讨...可以传入一个委托用来处理转换失败的操作,并重载此方法,提供一个默认的操作。   好,下面开工:     1....对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法调用在类型中实际定义的方法之间没有明显的差异。 扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。...定义转换失败操作的委托       C#内置封装的委托有两种,Action和Func委托,并有很多的重载版本,参数可以有十多个,所以不用担心参数问题。...(在元数据中存贮该信息),faild(textBox)表面看不太好理解,为什么一个对象后面带一个参数,其实C#编译器为我们做了很多工作,在这里实质为faild.Invoke(textBox),这样看还好理解委托是个类型

1.1K10

精:C#历来版本特性一览

前言 使用 C# 作为开发语言已经 15 个年头了,受惠于 C# 的不断更新,伴随着大量的新特性大量语法糖,让我更加容易写出简洁、高效的代码。...】 迭代器【yield return 语句】 协变和逆变【这时候还不支持泛型接口和委托】 getter/setter 单独可访问性 静态类 C# 3.0 发布日期:2007 年 11 月 C# 3.0...此版本继承和发展了 C# 6.0。对应 .NET Framework 4.7、4.7.1、4.7.2。“out 变量”、“模式匹配”是我比较喜欢的特性。...特性列了一大篇,实在是没法看了,下面就没有一一列举,脚本语言味儿越来越重,各种操作符、关键字更是玩出花来,心智负担越发沉重了。除了模式匹配,别的特性完全不想碰。...【继续增强……】 函数指针【图穷匕见,高性能计算这一块与我似乎没有交集】 后面懒得列了…… C# 10 发布日期:2021 年 11 月 C# 10 继续致力于删除不必要的模式、将数据算法分离以及提高

14420

《CLR via C#》笔记:第3部分 基本类型(3)

两个特性实例的相互匹配 检测定制特性时不创建从Attribute派生的对象 条件特性类 第十九章 可空值类型 C#对可空值类型的支持 C#的空接合操作符 CLR对可空值类型的特殊支持 第十七章 委托...逆变性是指方法获取的参数可以是委托的参数类型的基类。(P348 5)只有引用类型支持协变性逆变性。 用委托回调实例方法 实例,上述代码中的InstanceDelegateDemo方法。...(P359 3) C#委托提供的方法 C#提供的语法简化: 1、不需要构造委托对象(P360 last) 2、不需要定义回调方法(lambda表达式)(P361 2) 3、局部变量不需要手动包装到类中即可传给回调方法...(P378 2) 检测定制特性 仅仅定义特性类没有用。确实可以定义自己想要的所有特性类,并应用自己想要的所有实例。但这样除了在程序集中生成额外的元数据,没有其他任何意义。...在重载过程中也可以编写有关可空操作符的相关判断。 int? x = 5; int? y =null; 操作符对于可空值类型的操作结果: 1、一元操作符(+,++,-,–,!

87720

.NET面试题汇总

引用类型:数组,用户定义的类、接口、委托,object,字符串。 6、c#事件和委托的区别 使用位置不同:事件只能在本类型内部“触发”,委托不管在本类型内部还是外部都可以“调用”。...10、垃圾(GC)回收机制 .net平台会自动把声明的那些不再使用的变量,或者是对象占用的空间释放, 而不用你自己书写代码实现这样的功能 11、C# 托管非托管的理解 运行于.net平台上的代码,分配的资源一般会自动由平台的垃圾回收器释放...; 好处:目的是“高内聚,低耦合“的思想,分工明确,条理清晰,易于调试 ,而且具有可扩展性 21.重写和重载的区别?...重写:当一个子类继承一个父类,而子类中的方法父类中的方法名称、参数个数、参数类型一致时,就说明这个子类重写了父类的方法; 重载:方法名称相同,参数类型不同。...调用时,编译器会根据实际传入参数的形式,选择与其匹配的行。 22、数组和集合的区别?

92831

C# 委托 、事件、同步、异步知识点归纳

C# 委托 、事件、同步、异步知识点归纳 一、委托 基本用法: 1.声明一个委托类型。委托就像是‘类'一样,声明了一种委托之后就可以创建多个具有此种特征的委托。...(【也可以没有触发方式,直接invoke】) 解说: C#里,每一种‘事件Event'大概都对应着其‘事件处理者EventHandler'。...【更多的event是这么写出来的】 有些事件,并没有明显的‘发起者'。 委托和事件是啥关系 委托和自定义事件的使用方式十分十分类似。...如果这些任务应以公平的方式所有其他任务一起处理,就设置该选项为PreferFairness。...Action委托类存在不同的变体,可以传递至多16种不同的参数类型,没有泛型参数的Action类可以调用没有参数的方法。

1.4K41

WPF 开发

TextBox 的全局输入,那么可以使用下面代码 EventManager.RegisterClassHandler(typeof(TextBox), TextBox.KeyDownEvent, new RoutedEventHandler...如果有一个 C++ 写的dll,他需要一个函数指针,在C#使用,就可以传入委托。...传入的不是函数地址,传入的是把函数隐式转换委托,然后转换的委托是局部变量,会被gc,所以在C++拿到的是一个被回收的委托,调用时就会炸。 这里无法用catch,所以用这个会让程序退出。...调用C#的函数,使用委托,是隐式转换,上面代码可以写成下面的 private static void Func(){} public void C() { var...例子: 如果我用了一个程序集,然而代码没有直接引用,而是反射使用,这样,vs判断这个程序集没有使用,最后把他清除。所以会出现反射无法拿到,而且很难知道这里出现坑。

1.3K10

C#开发面试题_程序员面试题精选100题

C#中的委托是什么?事件是不是一种委托? 答 : 委托可以把一个方法作为参数代入另一个方法。...public: 公共成员,完全公开,没有访问限制。 internal:在同一命名空间内可以访问。 5. override重载的区别 答 :override 重载的区别。重载是方法的名称相同。...3.在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为 结尾。这样分析器就知道不用查找结束标记了。 4.在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。...重载了”==” 就必须重载 “!=” 90.在.net(C# or vb.net)中如何取消一个窗体的关闭。...答:表示绑定的数据源 是服务器端代码块 98.重载覆盖的区别?

96530

.Net知识大全(个人整理)

C#就是为宣传.NET而创立的,它直接集成于Visual Studio .NET中,VB也在.NET 1.0发布后对其进行支持, 所以这两门语言.NET平台耦合度很高,并且.NET上的技术大多都是以C...事件是不是一种委托? 答 : 委托是一种定义方法签名的类型,可以具有兼容签名的任何方法关联。可以通过委 托调用方法。委托用于将方法作为参数传递给其他方法。...方法不必委托签名完全匹配。 事件是一种特殊的委托。...它们独立于所有的类实例,即使没有类实例,也可以调用类的静态成员。 60.ASP.NETASP相比,主要有哪些进步?...在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用 查找结束标记了。 在XML中,属性值必须封装在引号中。在HTML中,引号是可用可不用的。

1.1K20

asp.net面试题收集 你都会了吗

struct值传递 类结构有很多相似之处:结构可以实现接口,并且可以具有类相同的成员类型。然而,结构在几个重要方面不同于类:结构为值类型而不是引用类型,并且结构不支持继承。...什么是重载?CTS、CLS和CLR分别作何解释?...答:据说相当于函数指针,定义了委托就可以在不调用原方法名称的情况下调用那个方法. msdn2005中是这样解释的: 委托具有以下特点: 委托类似于 C++ 函数指针,但它是类型安全的。...委托允许将方法作为参数进行传递。 委托可用于定义回调方法。 委托可以链接在一起;例如,可以对一个事件调用多个方法。 方法不需要与委托签名精确匹配。有关更多信息,请参见协变和逆变。...答:进程是老子,线程是儿子,没有老子就没有儿子,一个老子可以有多个儿子.一个儿子可以成为别人的儿子,一个老子也可以为别的老子生儿子. 13.什么是code-Behind技术。

87530

asp.net面试题130道「建议收藏」

是,是一种特殊的委托 5.override重载的区别 答 :重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要 Override 是进行基类中函数的重写。...24.在C#中,string str = null string str = “” 请尽量使用文字或图象说明其中的区别。...在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用 查找结束标记了。 4. 在XML中,属性值必须分装在引号中。...重载了”==” 就必须重载 “!=” 101.在.net(C# or vb.net)中如何取消一个窗体的关闭。...C#中 property attribute的区别,他们各有什么用处,这种机制的好处在哪里?

79010

C#7.3 新增功能

添加此功能意味着 fixed 可 System.Span 和相关类型配合使用。 有关详细信息,请参阅语言参考中的 fixed 语句一文。...)的重载比通过只读引用版本的重载更好。...在每个版本中,对重载解析规则进行了更新,以解决多义方法调用具有“明显”选择的情况。...在没有接收器时,编译器将仅添加静态上下文中的静态成员,否则,将同时添加静态成员和实例成员。 当接收器是不明确的实例或类型时,编译器将同时添加两者。...对于方法组转换,返回类型委托的返回类型不匹配的候选方法将从集中移除。 你将注意到此更改,因为当你确定哪个方法更好时,你将发现多义方法重载具有更少的编译器错误。

1.6K10
领券