我有一个与Perl中的多级继承有关的问题。
这是我的代码
mod.pm
XMLDecriptato = New MemoryStream()
Using stream_readerX As New StreamReader(XMLDecriptato, System.Text.Encoding.UTF8)
Dim FStreamCrypted As FileStream = File.Open(OpenFileDialog1.FileName, FileMode.Open, FileAccess.Read)
CryptStream(Pass, FStreamCrypted, XMLDecriptato, CryptType.Decrypt, True) 'True = Leave the underlying stream open.
XMLDecriptato.Seek(0, SeekOrigin.Begin) 'Reset the MemoryStream's position.
Dim xDocumentX As New XmlDocument()
xDocumentX.Load(stream_readerX)
End Using
prog.pl
FStreamCrypted.Seek(0, SeekOrigin.Begin)
我有一个包含三个类的.pm文件。我想使用第三类对象访问第一个类中的package first;
sub disp {
print "INSIDE FIRST\n";
}
package second;
@ISA = qw(first);
sub disp {
print "INSIDE SECOND\n";
}
package third;
@ISA = qw(second);
sub new {
$class = shift;
$ref = {};
bless $ref, $class;
return $ref;
}
sub show {
$self = shift;
print "INSIDE THIRD\n";
}
1;
方法。我不确定那是怎么回事。
我尝试使用两种方式访问:
但我不确定如何使用第三类对象直接访问它。
答案 0 :(得分:5)
$obj->first::disp()
,但你要求的是你绝对不应该做的事情。修复你的设计。
答案 1 :(得分:3)
如果你需要这样做,那么你就错误地定义了你的类。
third
类继承自second
类。 second
有自己对disp
的定义,因此它永远不会尝试从其超类first
继承该方法。这意味着third
获得second
简单的答案是将first::disp
称为其他内容。那样second
将没有方法的定义,并且将再次调用继承
如果您解释了潜在的问题,以及为什么要忽略继承的方法,那么也许我们可以帮助您找到更好的方法
另请注意,包和模块文件应以大写字母开头,每个类通常都在自己的文件中,因此您通常会在package First
等中使用First.pm
。