在课堂上我们有一个简单的任务来学习抽象类、接口和继承。 我第一次看到您可以将接口作为类型而不是实现该接口的类传递。
根据标题,哪个是更标准的做法? 在这个例子中,两者都有效,而且我很确定两者总是有效,只是泛型具有更大的灵活性?
public interface IPerson {}
public abstract class Person : IPerson
{
protected Person() {}
}
public class Employee : Person
{
public Employee() : base() {}
}
public class PersonManager<T> where T : IPerson
{
private List<T> people = new List<T>();
}
//OR
public class PersonManager
{
private List<IPerson> people = new List<IPerson>();
}
在大多数情况下,您应该使用非通用版本。尝试使所有内容通用将使您的代码和类变得不必要的复杂。
使用通用版本有几个原因:
people
字段是公开的。这实际上会使您的类成为一个专门的泛型集合,因此使用泛型集合的所有原因都可能适用。可能还有更多泛型有用的情况,这只是我想到的主要情况。
但是您应该尽量保持代码尽可能简单和可读。因此,除非您有其他原因,否则请使用常规的普通多态性。