我对以下情况的设计模式或最佳实践方法感兴趣:
假设我们有多个子类,它们是从一个公共接口派生的:
public interface IPerson{
string Name;
}
public class SomePerson : IPerson{
string Name;
bool hasAccess;
bool GetAccessInfo(){
//implementation
}
}
public class OtherPerson : IPerson{
string Name;
int NumberOfPoints;
int GetNumberOfPoints(){
//implementation
}
}
现在让我们假设我们有一个包含IPerson对象集合的类:
public class PersonHandler{
public List<IPerson> People;
}
所以这里的问题是,您将如何遍历People集合,并且仍然能够一次迭代地使用各个子类的成员和方法,例如GetNumberOfPoints或GetAccessInfo?
我不喜欢显式检查类型,我也不喜欢在接口中使用特定于子类的方法,因为它违反了OO设计的目的。
也许理想情况下,那些不应该在同一收藏中?我正在寻找与语言无关的答案。
答案 0 :(得分:2)
我同意向接口添加特定方法将是一个坏主意(更不用说违反了Interface Segregation Principle)。
模式匹配是函数式编程中的一种常见功能/做法,近年来已进入更多面向对象的语言(在C#7中使用if ( 0 == $rating ) {
$html = '<div class="star-rating">';
$html .= wc_get_star_rating_html( $rating, $count );
$html .= '</div>';
}
return $html;
运算符以及其他结构(例如{ {1}}语句,如下所示),它指的是基于给定对象的形状进行有条件的分支并绑定到其成员,而不必显式且不安全地投射对象。
我知道您正在寻找与语言无关的答案,但这是您在C#中可能遇到的上述问题:
is
希望这会有所帮助!
答案 1 :(得分:0)
我讨厌标记要关闭的帖子,因为每个问题都是唯一的且具有差异性,而且每个帖子都会吸引潜在的专家,但是请在StackOverflow上检查此post,这非常相似,答案是访问者模式。