Припустимо, у вас є базовий Employee
клас як такий:
class Employee
{
public string Name;
public int Years;
public string Department;
}
Тоді (в окремому класі) у мене є такі фрагменти коду (я думаю, я розумію всі, крім останнього):
Я вважаю, що наступний фрагмент коду працює, оскільки масив ініціалізатора створює масив об’єктів Employee, які мають той самий тип, що і призначена змінна робочої сили.
Employee[] workforceOne = new Employee[] {
new Employee() { Name = "David", Years = 0, Department = "software" },
new Employee() { Name = "Dexter", Years = 3, Department = "software" },
new Employee() { Name = "Paul", Years = 4, Department = "software" } };
Потім у мене є такий фрагмент коду. Я вважаю, що це працює, оскільки масив Employee
об’єктів об’єктів є реалізацією класу Array (), який реалізує IEnumerable
. Тому, я вважаю, саме тому масив може бути призначений IEnumerable?
IEnumerable workforceTwo = new Employee[] {
new Employee() { Name = "David", Years = 0, Department = "software" },
new Employee() { Name = "Dexter", Years = 3, Department = "software" },
new Employee() { Name = "Paul", Years = 4, Department = "software" } };
Тоді у мене є цей фрагмент коду:
IEnumerable<Employee> workforceThree = new Employee[] {
new Employee() { Name = "David", Years = 0, Department = "software" },
new Employee() { Name = "Dexter", Years = 3, Department = "software" },
new Employee() { Name = "Paul", Years = 4, Department = "software" } };
Я не впевнений, чому працює цей фрагмент коду? IEnumerable<Employee>
успадковує від IEnumerable
(і перевизначає (або перевантажує?) GetEnumerator()
метод), але чи не слід мені, отже, потрібен привід для роботи вищезазначеного:
//The cast does work but is not required
IEnumerable<Employee> workforceFour = (IEnumerable<Employee>)new Employee[] {
new Employee() { Name = "David", Years = 0, Department = "software" },
new Employee() { Name = "Dexter", Years = 3, Department = "software" },
new Employee() { Name = "Paul", Years = 4, Department = "software" } };
Здається, що масив неявно відкидається від типу IEnumerable
до, IEnumerable<Employee>
але я завжди думав, коли вам потрібно перетворити тип на щось більш конкретне, вам потрібен явний привід.
Можливо, мені не вистачає тут чогось простого в моєму розумінні, але чи може хтось допомогти мені з моїм розумінням навколо цього.
Дякую.
workforceThree
фрагментом.