我查看了一个代码示例,其中我看到了创建实例的不同方法。
所以代码在这里
public interface IEmployee
{
System.Int32? EmployeeID { get; set; }
System.String FirstName { get; set; }
System.String LastName { get; set; }
System.DateTime DateOfBirth { get; set; }
System.Int32? DepartmentID { get; set; }
System.String FullName();
System.Single Salary();
}
public class Employee : IEmployee
{
#region Properties
public System.Int32? EmployeeID { get; set; }
public System.String FirstName { get; set; }
public System.String LastName { get; set; }
public System.DateTime DateOfBirth { get; set; }
public System.Int32? DepartmentID { get; set; }
#endregion
public Employee(
System.Int32? employeeid
, System.String firstname
, System.String lastname
, System.DateTime bDay
, System.Int32? departmentID
)
{
this.EmployeeID = employeeid;
this.FirstName = firstname;
this.LastName = lastname;
this.DateOfBirth = bDay;
this.DepartmentID = departmentID;
}
public Employee() { }
public System.String FullName()
{
System.String s = FirstName + " " + LastName;
return s;
}
public System.Single Salary()
{
System.Single i = 10000.12f;
return i;
}
}
private List<IEmployee> myList = new List<IEmployee> { new Employee(1, "John", "Smith", new DateTime(1990, 4, 1), 1),
new Employee(2, "Gustavo", "Achong", new DateTime(1980, 8, 1), 1),
new Employee(3, "Maxwell", "Becker", new DateTime(1966, 12, 24), 2),
new Employee(4, "Catherine", "Johnston", new DateTime(1977, 4, 12), 2),
new Employee(5, "Payton", "Castellucio", new DateTime(1959, 4, 21), 3),
new Employee(6, "Pamela", "Lee", new DateTime(1978, 9, 16), 4) };
所以我只想知道为什么代码应该用IEmployee创建列表实例,为什么不是Employee。
这里我们可以像
一样编码private List<Employee> myList = new List<Employee> { new Employee(1, "John", "Smith", new DateTime(1990, 4, 1), 1),
new Employee(2, "Gustavo", "Achong", new DateTime(1980, 8, 1), 1),
new Employee(3, "Maxwell", "Becker", new DateTime(1966, 12, 24), 2),
new Employee(4, "Catherine", "Johnston", new DateTime(1977, 4, 12), 2),
new Employee(5, "Payton", "Castellucio", new DateTime(1959, 4, 21), 3),
new Employee(6, "Pamela", "Lee", new DateTime(1978, 9, 16), 4) };
它也有效....他们为什么要使用IEmployee。 为什么编码器使用IEmployee而不是Employee,所以必须有一些特定的目标。所以我只需要知道使用IEmployee的目标。 我正在寻找好的解释。请指导我。感谢。
答案 0 :(得分:8)
如果您希望拥有List<IEmployee>
的多个实现,则使用IEmployee
可以使代码保持灵活性。例如,您可能希望拥有Employee : IEmployee
和Manager : IEmployee
,并使用List<IEmployee>
允许列表同时包含
答案 1 :(得分:1)
你说你想要一些代码。我会告诉你一些(为了回答而略有不同)。
假设你有
public interface IPlanet {
string Name {get;}
}
然后多次专门化该界面:
public class Mars : IPlanet { public string Name { get { return "Mars"; } } }
public class Venus : IPlanet { public string Name { get { return "Venus"; } } }
public class Jupiter : IPlanet { public string Name { get { return "Jupiter";} } }
public class Earth : IPlanet { public string Name { get { return "Earth"; } } }
然后你可以这样做:
List<IPlanet> solarsystem = new List<IPlanet> {
new Mars(),
new Venus(),
new Jupiter(),
new Earth(),
};
因为他们共享相同的界面,你可以这样做:
foreach (var planet in solarsystem) {
Console.WriteWrite (planet.Name);
}
因此,从某种意义上说,接口可以帮助您以同类方式管理异构对象。这也是一种(很多)通用的,可重复使用的编程(不要查看维基百科网站,它将通用编程与模板和泛型等同起来。)
请注意,List
实现了IList
- 界面,因此您可以进行更多概括:
IList<IPlanet> solarsystem = new List<IPlanet> {
new Mars(),
new Venus(),
new Jupiter(),
new Earth(),
};
无论您是否应该参加,请参阅List<T> or IList<T>。