Текущий экземпляр родительского объекта - PullRequest
0 голосов
/ 18 декабря 2018

Наличие следующих объектов:

public class Employee
{
    public string LastName { get; set; } = "";

    internal class SubordinateList<T> : List<T>, IPublicList<T> where T : Employee
    {
        public new void Add(T Subordinate)    {    }
    }
    public IPublicList<Employee> Subordinates = new SubordinateList<Employee>();
}

Объект SubordinateList находится внутри объекта Employee, что делает Employee определенным образом родителем SubordinateList.

Если поместить этот кодниже:

Anakin = New Employee();
Luke = New Employee();
Anakin.Subordinates.Add(Luke);

Третья строка вызовет метод «Добавить» в SubordinateList.Я хотел бы получить текущий экземпляр для Parent of SubordinateList следующим образом:

public new void Add(T Subordinate)
{
    T Manager = Subordinate.ParentInstance;

    // then it will be possible to see the current value of
    // the property "LastName" for Anakin with "Manager.LastName"
}

1 Ответ

0 голосов
/ 18 декабря 2018

Вы не можете сделать это таким образом, поскольку у вас нет ссылки на менеджера.Вот как я бы это реализовал:

public class Employee
{
    public string FirstName { get; set; } = "";
    public string LastName { get; set; } = "";
    public string HiredDate { get; set; } = "";

    private List<Employee> _subordinates = new List<Employee>();
    public ReadOnlyCollection<Employee> Subordinates => _subordinates.AsReadOnly();

    public void AddSubordinate(Employee employee)
    {
        _subordinates.Add(Employee);
        //the manager is 'this'
        var managerLastName = this.LastName;
     }
}

Предоставление подчиненного списка как ReadOnlyCollection позволяет другим классам читать список, но не позволяет им напрямую обновлять список.Поэтому для добавления сотрудников можно использовать только метод AddSubordinate(), где вы можете делать все, что вам нужно, с помощью информации менеджера.

...