标签:SendData c# void dynamic 接口 参数 data public
在用dynamic做为一个方法的参数时,在方法内调用基于接口的对象方法,该方法对来源于接口的父接口时一不小心会报该方法未被申明的错误,闲话不多说,直接看源码。
1.首先先建一个接口
public interface ISendBase { void SendDataBase(string data); }
2.再创建一个接口,并继承上述的接口
public interface ISend : ISendBase { void SendData(string data); }
3.创建一个继承接口的实现
public class SendData : ISend { public void SendDataBase(string data) { Console.WriteLine(data); } void ISend.SendData(string data) { Console.WriteLine(data); } }
4.创建一个用于调用实现接口类的方法,且该方法以dynamic类型作为参数
public void Send(dynamic data) { ISend send = new SendData(); send.SendDataBase(data.ToString()); }
注意此种写法调用将会报如下错误
你将会被这头痛,明明在接口的基类内有该方法的申明,并且编译通过无任何语法错误,为何呢?然用如下写法却能成功执行
public void Send(dynamic data) { ISend send = new SendData(); string strData = data.ToString(); send.SendDataBase(strData); }
原因:dynamic类型作为一个动态类型,只有在运行过程中方可知其类型,在采用第一种调用时在执行过程时传入的参数未知类型的,然在接口中并未有dynamic类型的参数方法申明,故而报错,然第二种先通过一个变量来接收dynamic类型参数并将其强制转换了,至此对其明确了类型,然后再将变量传入调用方法中就能找到相应的方法。
标签:SendData,c#,void,dynamic,接口,参数,data,public 来源: https://www.cnblogs.com/hnwl0507/p/14964216.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。