protected类属性或方法具有local成员的所有特征,除此之外的是,protected类属性或方法对扩展类是可见的。
也就是说,protected类属性或方法可以被类自身和扩展类访问,依然不允许在类的外部访问。
声明一个protected类属性或方法,需要通过关键字“protected”。
class packet; protected int addr; protected function void disp(input int data); $display(from packet); $display( data = %h, data); $display( addr = %h, addr); endfunction endclass class eth_packet extends packet; function set_addr; addr = 'hf; //protected property 'addr' visible to extended class endfunction function void eth_disp; super.disp('hf); //protected method 'disp' visible to extended class endfunction function void disp(input int data); //ok to override 'protected' method in extended class $display(from eth_packet); $display( data = %h, data); endfunction endclass module class_top( ); initial begin packet p1; eth_packet e1; e1 = new( ); p1 = new( ); //p1.disp(20); //compile error //protected methods 'disp' not visible outside the class e1.eth_disp; e1.disp('hffff); end endmodule
仿真log:
from packet data = 000000ff addr = 00000000from eth_packet data = 0000ffff v c s s i m u l a t i o n r e p o r t
在上面的例子中,我们声明了一个类“packet”,其中包含protected成员“addr”和一个protected方法“disp” 。
在扩展类“eth_packet”中,我们直接访问成员“addr”以及调用父类的“disp”方法都不会发生编译错误。
在module中直接调用“p1.disp(20);”就会发生编译错误:
error-[sv-icma] illegal class method accesstestbench.sv, 39protected method 'disp' of class 'packet' is not visible to scope'class_top'.please make sure that the above method is called only from its own classproperties as it is declared as protected.
“6G全场景按需服务关键技术”项目获国家资助
特斯拉应用遭遇重大网络故障,车主无法访问应用
前途汽车联手Mullen 2019年在美国开始接受预订
富士康开始在印度生产苹果新一代手机iPhone 15
四维图新旗下世纪高通展露车城一体化应用成果,助力京津冀交通协同发展
SystemVerilog中的Protected成员
我国电缆行业发展状况
鹏博士转让宽带用户,加快向新兴领域转型
为提升电动汽车的充电速度有什么办法
倾倒开关工作原理及功能简析
混凝土拌合站动态质量监控系统
GPS授时工作原理
关于嵌入式电能量采集系统的详细剖析
红宝石电解电容寿命权威计算(干货)
PS5强大机能细节曝光
导热硅胶片有哪些特点,它的安装方法是怎样的
小米Mix2什么时候上市最新消息:小米Mix现货刚到手,小米Mix2马上就来,雷军表示这次不玩“耍猴”营销?
大功率LED照明恒流驱动电源的设计
中国MOCVD累计装置量有望2012年跃居第一
Linux服务器设置指南-代理接入服务器(2)1