实现通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口的类需要实现所有通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口方法。通常情况下,通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口的实现方法也为public型。如下案例:
using System ;interface IControl { void Paint();}public class EditBox: IControl { public void Paint() { Console.WriteLine('Pain method is called!'); }}class Test { static void Main() { EditBox editbox = new EditBox(); editbox.Paint(); ((IControl)editbox).Paint(); }}
私有方法不能实现通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口方法
为什么会这样呢?如:
我们之所以可以通过((IControeditbox).Paint()方法访问到代码是因为通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口方法Paint是公有的。但是我们不能通过editbox.Paint()方法访问到代码是因为EditBox的Paint方法是私有的。在EditBox内部,通过ShowPaint方法可以同时访问私有的Paint方法与通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口IControPaint方法。
通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口就好像是关系型数据库中的一对多表,一个通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口对应多个通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口方法,每个通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口方法又对应虚拟方法表中的某个公有或私有方法。上面代码在内存中的镜像可由下描述:
可见,EditBox中公有的Paint方法并不是通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口实现方法,真正的通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口实现方法是IControPaint,这将导致editbox.Paint()方法与((IControeditbox).Paint()的执行结果并不一样。
公有方法实现通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口方法
如果EditBox中的Pait方法为公有并且同时提供了IControPaint方法,程序将是如何运行的呢?代码如下:
using System ;interface IControl { void Paint();}public class EditBox: IControl { public void Paint() { Console.WriteLine('Pain method is called!'); } void IControl.Paint() { Console.WriteLine('IControl.Pain method is called!'); }}class Test { static void Main() { EditBox editbox = new EditBox(); editbox.Paint(); ((IControl)editbox).Paint(); }}
代码如下:
using System ;interface IControl { void Paint();}public class EditBox: IControl { void Paint() { Console.WriteLine('Pain method is called!'); } void IControl.Paint() { Console.WriteLine('IControl.Pain method is called!'); } public void ShowPaint() { this.Paint(); ((IControl)this).Paint(); }}class Test { static void Main() { EditBox editbox = new EditBox(); editbox.ShowPaint(); //editbox.Paint(); ((IControl)editbox).Paint(); }}
程序执行结果如下:
程序在编译时将显示如下编译错误:““EditBox”不会实现通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口成员“IControPaint()”。“EditBox.Paint()”或者是静态、非公共的,或者有错误的返回类型。”
程序执行结果如下:
这是由于通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口规范中的方法默认的访问权限是public,而类中的默认访问权限是default,也就是说private,因此导致权限范围收缩,两者权限并不相同,所以必须将类的权限调整为public才可以使上面的代码得以执行。
程序的执行结果为:
尽管C#在定义通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口时不用指明通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口方法的访问控制方式,但默认通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口方法均为public型。下面是使用Reflector查看的通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口IL代码
.class private interface abstract auto ansi IControl{ .method public hidebysig newslot abstract virtual instance void Paint() cil managed { }}
在一些特殊情况下,需要专门实现某个通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口的方法。
实现专门的通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口方法
程序运行时内存中的镜像可简化表示为:
如果想将通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口方法直接实现为私有方法是办不到的。下面的EditBox的代码中Paint方法没有特殊说明,默认为private,导致代码无法执行:
using System ;interface IControl { void Paint();}public class EditBox: IControl { void Paint() { Console.WriteLine('Pain method is called!'); } public void ShowPaint() { this.Paint(); ((IControl)this).Paint(); }}class Test { static void Main() { EditBox editbox = new EditBox(); editbox.ShowPaint(); }}
程序执行时内存布局如下:
实现专门的通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口方法
注意:“voidIControPaint()”前不能加任何的修饰限定符号,诸如publiprivate等,这在C#的语法中是不允许的。该方法反编译得到的IL代码如下:
.class public auto ansi beforefieldinit EditBox extends object implements IControl{ ....... .method private hidebysig newslot virtual final instance void IControl.Paint() cil managed { .override IControl::Paint }}
结论
EditBox类拥有一私有Paint方法,但这并不是通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口方法的实现。EditBox类中还包含了一“voidIControPaint()”方法,是该方法复写了通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口的Paint方法,该方法是私有的。
从中我们可以看到直接对Paint方法的调用以及通过通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口对Paint方法的调用。可见通过通达信行情获取通达信行情获取接口,接口,通达信行情获取接口,接口对方法进行调用需要多出一道转换工作,因此执行效率不如直接调用。
文章为作者独立观点,不代表股票交易接口观点