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

ArgumentException:向事件添加协变方法时不兼容的委托类型

ArgumentException是一个异常类,表示参数错误。当方法的参数不符合预期时,会抛出该异常。

向事件添加协变方法时不兼容的委托类型是指在事件订阅过程中,尝试将一个不兼容的委托类型添加到事件的委托列表中。协变是指可以将一个派生类型的委托赋值给一个基类型的委托变量。但是在事件中,委托类型必须完全匹配,不支持协变。

在C#中,事件是一种特殊的委托,用于实现观察者模式。事件的订阅者通过将自己的方法添加到事件的委托列表中,来接收事件的通知。

当尝试将一个不兼容的委托类型添加到事件的委托列表中时,会抛出ArgumentException异常。这通常是因为委托类型的参数列表或返回类型与事件的委托类型不匹配。

解决这个问题的方法是确保添加到事件的委托类型与事件的委托类型完全匹配。可以通过检查委托的参数列表和返回类型来确保匹配。

腾讯云相关产品和产品介绍链接地址:

  • 云函数(Serverless):https://cloud.tencent.com/product/scf
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版(CDB):https://cloud.tencent.com/product/cdb
  • 云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 云网络(VPC):https://cloud.tencent.com/product/vpc
  • 云安全中心(SSP):https://cloud.tencent.com/product/ssp
  • 云直播(CSS):https://cloud.tencent.com/product/css
  • 云点播(VOD):https://cloud.tencent.com/product/vod
  • 人工智能(AI):https://cloud.tencent.com/product/ai
  • 物联网(IoT):https://cloud.tencent.com/product/iot
  • 移动开发(MPS):https://cloud.tencent.com/product/mps
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云游戏引擎(GSE):https://cloud.tencent.com/product/gse

请注意,以上链接仅供参考,具体产品选择应根据实际需求和情况进行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

c#4.0中不变(invariant)、(covariant)、逆(contravariant)小记

园子里已经有不少高手撰文写过这个话题:比如“装配脑袋”NET 4.0中泛型和反 (2008年他就已经搞明白了这个概念)、偶像Artech“C# 4.0新特性-""与"逆"以及背后编程思想...” 以及1-2-3 (Covariance)和逆(Contravariance)十万个为什么 这里只是从应用角度,简单记录一下: 从.net3.5开始,System命名空间里就定义了一个泛型委托... 说得更白一点,4.0以前泛型委托,泛型参数一旦在实例使用过程中明确为具体类型后,是不能隐式自动转换成其它类型,哪怕类型兼容(按道理来讲,fn1...,所以返回类型ArgumentException可以向上转化为Exception不会有任何问题,所以说fn1中参数类型与fn2中参数类型是安全兼容,但是编译回不允许),这种不允许泛型参数类型变化特点...记忆方法:向上转型称(因为这种转型肯定是安全,比较“和谐”),向下转型称逆(因为不一定能转型成功,有出错可能,称逆) 最后:in,out这二个关键字不仅能用于泛型委托,同样也适用于泛型接口(

802100

金三银四面试:C#.NET面试题中高级篇3,含答案解析

sample.SampleShow(); } Console.ReadKey(); } (2)as 不仅负责检查兼容性还会进行类型转换,并返回结果,如果兼容则返回...而.NET委托完全不同,委托类型安全类,它定义了返回类型和参数类型委托类不仅包含对方法引用,也可以包含对多个方法引用。---->详解7.在.NET中可以自定义委托吗?...public delegate void Feedback(int num); 理解委托一个要点是它们安全性非常高。在定义委托,必须给出它所表示方法签名和返回类型等全部细节。...(Object sender, TEventArgs e)where TEventArgs : EventArgs; 4).使用获取泛型实参和返回值委托,可利用逆。...逆:父类转换为子类;:子类转换为父类 ---->详解 10. 什么是匿名方法? 匿名方法是用作委托参数一段代码。

1.7K30

.Neter所应该彻底了解委托

委托究竟是什么? 委托究竟是用来干嘛委托跟匿名函数区别? 委托事件关系?...: 首先函数指针就是一个内存地址,指向函数入口内存地址 当函数指针做一个函数参数,确实会起到一定解耦作用 函数指针很明显是类型不安全 我们再来声明和使用委托: public delegate int...有兴趣朋友可以去了解事件原理,也是很有趣 最后最后,我们还要谈下委托一个功能: 委托参数逆和返回值 由于委托也支持泛型委托,因此我们可以看看微软定义好 public delegate...void Action(T obj);//其中in表示逆 public delegate TResult Func();//其中out表示 class Program...I am Func 想要了解更深朋友可以去了解泛型和逆,在这里就不深入探讨了

37520

30分钟泛型教程

,我们希望在使用类型时候就指定T类型 我们希望在使用这个类型方法,再指定T类型 来看看如下代码: public class MyClass { public...但你可以先把T转化成object再把object转化成你要类型(一般推荐这么做,你应该考虑把T转化成一个约束兼容类型) 你也可以考虑用as操作符进行类型转化,这一般不会报错,但只能转化成引用类型。...十、逆和协  一般情况下,我们使用泛型,由T标记泛型类型是不能更改 也就是说,如下两种写法都是错误 var a = new List(); List b =...: 泛型类型T可以从派生类型更改为它类型, 用out关键字来标记协变形式类型参数, 而且这个参数一般作为返回值 如果我们定义了一个这样委托: public delegate TResult...注意: 只有接口和委托泛型类型才可以使用逆和协特性 参考资料 Mgen博客 CLR VIA C#(第三版)

68560

C#规范整理·泛型委托事件

委托本身是一种引用类型,它保存也是托管堆中对象引用,只不过这个引用比较特殊,它是对方法引用。事件本身也是委托,它是委托组,C#中提供了关键字event来对事件进行特别区分。   ...11.使用泛型参数兼容泛型接口不可变性# 让返回值类型返回比声明类型派生程度更大类型,就是“”。...“T”为。 12.让接口中泛型参数支持# 除了11中提到使用泛型参数兼容泛型接口不可变性外,还有一种办法就是为接口中泛型声明加上out关键字来支持。...13.理解委托# 委托泛型变量天然是部分支持。...# 逆是指方法参数可以是委托或泛型接口参数类型基类。

20630

C#4.0新增功能03 泛型中和逆

泛型类型参数支持和逆,可在分配和使用泛型类型方面提供更大灵活性。 在引用类型系统、逆和不变性具有如下定义。...始终可以将此实参安全地传递给基础方法,因为该方法形参属于类型 Base。 通常,类型参数可用作委托返回类型,而逆类型参数可用作参数类型。... Circle 中添加新 SortedSet对象,每次将新元素与现有元素进行比较,都会调用 IComparer.Compare 对象IComparer(Of Shape...但不能将类型参数用作接口方法泛型类型约束。 如果接口方法具有泛型委托类型参数,则接口类型类型参数可用于指定委托类型类型参数。...Visual Basic 和 C# 不允许违反和逆类型参数使用规则,也不允许将和逆批注添加到接口和委托类型之外类型参数中。

1.3K20

了解C#和逆

前言 在引用类型系统、逆和不变性具有如下定义。 这些示例假定一个名为 Base 基类和一个名为 Derived派生类。...: 兼容性:.NET2.0就推出了泛型,而从.NET 2.0到.NET 3.5期间不支持对泛型接口中占位符T支持隐式转换,因此在.NET4.0推出和逆 为了支持更广泛隐式类型转换,在这里就是在泛型体系中支持...,有下面的约束,否则则会在编译时报错: 泛型参数占位符以out关键子标识,并且占位符T只能用于只读属性、方法或者委托返回值,out简而易懂,就是输出意思 当要进行类型转换,占位符T要转换目标类型也必须是其基类...、方法或者委托输入参数 当要进行类型转换,占位符T要转换目标类型也必须是其子类,上述例子则是FooBase转为Foo 总结 和逆只对泛型委托和泛型接口有效,对普通泛型类和泛型方法无效 和逆类型必须是引用类型...,因为值类型不具备继承性,因此类型转换存在兼容性 泛型接口和泛型委托可同时存在和逆类型参数,即占位符T 参考 泛型中和逆 | Microsoft Docs 《你必须知道.NET(第2

89410

.NET面试题系列 - 泛型

“可变性是以一种类型安全方式,将一个对象作为另一个对象来使用。“ - Jon Skeet 泛型 泛型相比反射,委托等较为抽象概念要更接地气得多,而且在平常工作,我们几乎时刻都和泛型有接触。...例如对普通继承中可变性:若某方法声明返回类型为Stream,在实现时可以返回一个MemoryStream。可变性有两种类型和逆。...这也告诉我们,逆变性是很不正常。 泛型与逆 变性和out关键字搭配使用,用于调用者返回某项操作值。例如下面的接口仅有一个方法,就是生产一个T类型实例。那么我们可以传入一个特定类型。...使用in和out表示可变性 如果类型参数用于输出,就使用out,如果用于输入,就使用in。注意,和逆变性体现在泛型类T和T派生类。目前out 和in 关键字只能在接口和委托中使用。...与逆相互作用 以下代码中,接口IBar中有一个方法,其接受另一个接口IFoo作为参数。IFoo是支持。这样会出现一个问题。

67830

C#2.0新增功能06 和逆

在 C# 中,和逆能够实现数组类型委托类型和泛型类型参数隐式引用转换。 保留分配兼容性,逆则与之相反。 以下代码演示分配兼容性、和逆之间差异。 // 分配兼容性....// 分配兼容性被反转. Action actString = actObject; 对方法和逆支持允许将方法签名与委托类型相匹配。...这样,不仅可以将具有匹配签名方法分配给委托,还可以分配与委托类型指定派生类型相比,返回派生程度更大类型方法)或接受具有派生程度更小类型参数方法(逆)。...有关详细信息,请参阅委托变体 (C#) 和使用委托变体 (C#)。 以下代码示例演示对方法和逆支持。...使用委托变体 (C#) 演示如何使用非泛型委托和逆支持以将方法签名与委托类型相匹配。

1K10

编写高质量代码改善C#程序157个建议

本文主要学习记录以下内容:   建议42、使用泛型参数兼容泛型接口不可变性   建议43、让接口中泛型参数支持   建议44、理解委托   建议45、为泛型类型参数指定 建议42、...使用泛型参数兼容泛型接口不可变性 让返回值类型返回比声明类型派生程度更大类型,就是“”。...实际上,只要泛型类型参数在一个接口声明中不被用来作为方法输入参数,我们都可姑且把它堪称是“返回值”类型。所以,本建议中这种模式是满足“定义。...建议44、理解委托 委托泛型变量天然是部分支持。为什么说是“部分支持”呢?... 逆是指方法参数可以是委托或泛型接口参数类型基类。

30730

C#委托

假如在写游戏,有一个人物,他会升级,那么在他升级时候,需要给他添加潜力值,而判断升级是经验类需要写。 先写一个经验类。 核心 如果当前经验大于最大经验,升级。...这时可以使用委托。 如果当前经验大于最大经验 调用函数升级 那么函数 升级 如何让人物知道,可以使用一个委托 升级 调用委托 于是人物可以添加函数到经验。...如果使用委托是 多播,那么小心用 BeginInvoke 如果使用 同步,那么多个方法是可以运行 static void Main(string[] args)...需要转类型,定义是知道他是什么类型,上面使用是 Action ,所以可以转 Action ,如果是自定义,那么使用自定义。...如果委托发生异常 如果委托方法里没有 try catch,那么如果使用 invoke, 委托是函数指针链,所以会在执行异常退出。

38030

C#基础篇——泛型

可以创建:泛型接口、泛型类、泛型方法、泛型事件和泛型委托 开始 泛型类 泛型类封装不特定于特定数据类型操作。泛型类最常见用法是用于链接列表、哈希表、堆栈、队列和树等集合。...: Stack s = new Stack(); Stack.StackDelegate myDelegate = StackNotify; 泛型委托在定义基于典型设计模式事件特别有用...可以看到,在泛型接口T前面有一个out关键字修饰,而且T只能是返回值类型,不能作为参数类型,这就是。使用了以后,左边声明是基类,右边可以声明基类或者基类子类。...除了可以用在接口上面,也可以用在委托上面: Func func = new Func(() => null); 除了使用.NET框架定义好以为,我们还可以自定义,...MyList();//逆+ 有关可变性注意事项 变化只适用于引用类型,因为不能直接从值类型派生其他类型 显示变化使用in和out关键字只适用于委托和接口,不适用于类、

1.3K40

C# 4.0新特性-与逆以及背后编程思想

,我们就可以这样定义和逆:如果类型TBar是基于强类型Bar类型(比如类型参数为Bar泛型类型,或者是参数/返回值类型为Bar委托),而类型TFoo是基于弱类型Foo类型就是将TBar...二、委托与逆使用 和逆主要体现在两个地方:接口和委托,先来看看在委托中如何使用和逆。...现在我们定义了如下一个表示无参函数泛型委托Function,类型参数为函数返回值类型。泛型参数之前添加了一个out关键字表示T是一个变变体。...下面定义了一个名称为Operate泛型委托,接受一个具有泛型参数类型参数。在定义泛型参数前添加了in关键字,表示T是一个基于逆变体。...将契约观点应用在委托上面,委托实际上定义了一个方法签名(参数列表和返回值),那么参数和返回值类型就是契约,现在关键是谁去履行这份契约。

60380

C#委托 如果委托发生异常事件

假如在写游戏,有一个人物,他会升级,那么在他升级时候,需要给他添加潜力值,而判断升级是经验类需要写。 先写一个经验类。 核心 如果当前经验大于最大经验,升级。...这时可以使用委托。 如果当前经验大于最大经验 调用函数升级 那么函数 升级 如何让人物知道,可以使用一个委托 升级 调用委托 于是人物可以添加函数到经验。...如果使用委托是 多播,那么小心用 BeginInvoke 如果使用 同步,那么多个方法是可以运行 static void Main(string[] args)...需要转类型,定义是知道他是什么类型,上面使用是 Action ,所以可以转 Action ,如果是自定义,那么使用自定义。...如果委托发生异常 如果委托方法里没有 try catch,那么如果使用 invoke, 委托是函数指针链,所以会在执行异常退出。

1.4K20

不惧面试:委托

3.委托能用来做什么?★☆ 本题主要考察委托在我们写code用途。一个笼统准则:当要把方法传给其他方法,需要使用委托。...一个方法中传递一个子类方法。   c.事件。     一般通知代码发生了什么事件。GUI编程主要处理事件。在引发事件,运行库需要知道应执行哪个方法。     ...这就需要处理事件方法作为一个参数传递给委托。 4.如何自定义委托★☆ 声明一个委托类型,它实例引用一个方法,该方法获取一个int参数,返回void。...,可利用逆。...逆:父类转换为子类;:子类转换为父类 9.什么事匿名方法★★ 匿名方法是用作委托参数一段代码。

795141

C# 发展历史及版本新功能介绍

到达迭代器方法结尾,循环便已完成。 和逆 在 C# 中,和逆能够实现数组类型委托类型和泛型类型参数隐式引用转换。 保留分配兼容性,逆则与之相反。...以下代码演示分配兼容性、和逆之间差异。 // Assignment compatibility....泛型和逆 和逆都是术语,前者指能够使用比原始指定派生类型派生程度更大(更具体类型,后者指能够使用比原始指定派生类型派生程度更小(不太具体类型。...泛型类型参数支持和逆,可在分配和使用泛型类型方面提供更大灵活性。 在引用类型系统、逆和不变性具有如下定义。...后续版本 C# 偶尔会依赖项添加类型或成员。

4.1K20

List与List区别何在

换句话来说,使用泛型类不带尖括号、具体类型用法,其实是一种妥协:为了与早期程序兼容。 也就是说:对于现在写程序,谁要是使用泛型类填写具体类型,都应该打屁股哦。...注意 现在使用泛型类,都应该为泛型指定具体类型。 为了保持与早期程序兼容,Java允许在使用泛型类传入具体类型搞法,被称为”原始类型(raw type)“。...②号代码处list集合添加String类型元素。...那么问题来了,②号代码处是否可以list集合(其实是List集合)添加String类型元素呢? 如果你运行这个程序,你能得到正确答案吗? 答案是:完全可以添加进去!...>变量,此时本质就是泛型。 由于List代表元素不确定类型List集合,因此程序无法 List<?

1.7K20

C#进阶-与逆

与逆 (共):泛型委托或泛型接口类似于父类转向子类变换; 逆(反):泛型委托或泛型接口类似子类到父类隐式转换; 逆用来描述类型转换后继承关系,其定义:如果A、B表示类型...,f(x)表示类型转换,≤表示继承关系(比如,A≤B表示A是由B派生出来子类) 当A≤B,若f(x)是逆,则f(B)≤f(A)成立; 当A≤B,若f(x)是,则f(A)≤f(B)成立;...,和string与Object父子关系是相反和逆能够实现数组类型委托类型和泛型类型参数隐式引用转换。...InterfaceFuncObject = InterfaceFuncInt;//编译失败,值类型参与或逆 //泛型接口-逆 InterfaceFuncB<object...//数组-逆 //数组使派生程度更大类型数组能够隐式转换为派生程度更小类型数组。

9010

五分钟看完,彻底理解C#

、逆 解决问题 泛型类型转换 比如Person类是Student父类,我们平时可以直接: Person A = new Student(); 这是所谓隐式转换,相信百分之999.99%的人都知道...这种从派生类转向基类兼容,就是所谓。 说白了,我可以造个学生,结果你说给个人就行, 那不是so easy。...最后我们总结下,逆和协就是让方法有了泛型类型转换能力,强化了方法多态能力。 问题点 1、属性为啥可以用逆? 属性不就是get/set方法。...2、为什么接口和委托可以用逆,类不行? 拜托你找一下共同点,接口和委托共同点,都是行为,也就是方法为核心。接口里不能有字段。这也印证了我说最终是为方法服务。...之所以类不行,我大概理解是方法和实例是分开,本身不和实例存储在一起,也不是每个实例一份,如果逆和协可以服务类,那么会出现同样类型,但是每个实例内部同一个字段类型都不一样,这对于存储和类型安全都是问题

17120

C#学习笔记七: C#4.0中微小改动-可选参数,泛型可变性

可选参数重在"可选", 即在调用方法, 该参数可以明确指定实参, 也可以指定实参.如下代码: 1 class Program 2 { 3 static void Main() 4...这就是可选参数好用之处, 特别是对于一个系统后期维护很好使用, 在真实项目中我也使用过这样用法, 如下例: 在我们做系统中切换User有SwitchUser(lougout当前user,然后添加...这里解决方案就是仍然使用同一个Check方法,但是给这个Check方法添加一个可选参数来判断到底是执行哪个操作, 然后根据不同操作去做相应修改....类型. 2.3和逆注意事项 (1)只有接口和委托才支持和逆, 类或泛型方法类型参数都不支持和逆 (2)和逆只适用于引用类型, 值类型不支持和逆(例如List无法转化为...IEnumerable) (3)必须显式地用in或out来标记类型参数 (4)委托可变性不要再多播委托中使用 3,动态类型 在C#4.0中, 微软引入了dynamic管家你来定义动态类型

1.4K80
领券