【发布时间】:2013-12-04 23:40:59
【问题描述】:
这是我的具体场景,其中包含一个接口及其实现:
IPerson {string Name;}
American : IPerson {string Name;}
Asian : IPerson {string Name;}
European : IPerson {string Name;}
People = new List<IPerson>(); // This list can have American, Asian and/or European
当我访问People 列表时,我需要区分美国、亚洲和欧洲,它们可以共享相同的界面。使用所有实现 IPerson 的附加接口(IAmerican、IAsian、IEuropean)是否很好,并使用它来区分实现类,例如:
IAmerican : IPerson {}
IAsian : IPerson {}
IEuropean : IPerson {}
American : IAmerican {string Name;}
Asian : IAsian {string Name;}
European : IEuropean {string Name;}
People = new List<IPerson>();
People.Add(new American());
People.Add(new Asian());
People.Add(new European());
var americans = People.OfType<IAmerican>(); // Getting all Americans from People
新接口没有多大用处,只是用来隔离对象。这是一个好方法还是我应该在 IPerson 中实现一些类型属性来区分它的实现?
【问题讨论】:
-
对我来说没有意义。放置一个名为
Nationality的属性并使用.Where() -
我会选择@HighCore.. 选择一个属性。假设您需要添加专业,您会添加属性专业还是单独的类,如
AmericanManager、AsianStudent.?对我来说没有意义 -
真正的问题是:为什么需要以不同的方式对待人员集合中的人员?你应该重新考虑你的整体设计。