类层次结构中的基类初始化与对象构建销毁
1. 基类初始化问题及解决方案
在面向对象编程中,使用内向外(inside - out)类而非哈希(hash)有一个显著优势,即基类和派生类可以拥有名称完全相同的属性,而单级哈希无法实现这一点。然而,当构造函数参数通过哈希传递时,这一特性会引发问题。如果同一层次结构中的两个或多个类恰好有同名属性,构造函数就需要具有相同键的两个或多个初始化器,而单个哈希无法提供。
解决方案是将初始化器值划分为不同的集合,每个集合有唯一的名称,然后将其传递给相应的基类。最简单的方法是传递一个哈希的哈希,其中每个顶级键是一个基类的名称,对应的值是该基类的初始化器哈希。
以下是一个示例代码,展示了如何避免构造函数参数中的名称冲突:
package Client;
use Class::Std::Utils;
{
my %client_num_of;
my %name_of;
sub new {
my ($class, $arg_ref) = @_;
my $new_object = bless anon_scalar( ), $class;
$client_num_of{ident $new_object} = $arg_ref->{'Client'}{client_num};
$name_of{ident $new_object} = $arg_ref->{'Client'}{client_name};
return $new_object;
}
}
超级会员免费看
订阅专栏 解锁全文
39

被折叠的 条评论
为什么被折叠?



