각각 서로의 기능을 필요로 하는 클래스가 있는데, 링크가 한쪽 방향으로만 되어 있는 경우, 반대 방향으로 포인터를 추가하고 수정자가 양쪽 셋트를 모두 업데이트하게 변경한다.
/* * 두 클래스가 서로의 기능을 사용해야 하는데 한 방향으로만 연결되어 있을 땐 * - 역 포인터(참조)를 추가하고 두 클래스를 모두 업데이트 할 수 있게 접근 한정자를 수정하자. * */ class Order { private HashSet<Customer> _customers = new HashSet<Customer>(); public IEnumerable<Customer> Customers { get { return _customers; } } public void AddCustomer(Customer customer) { customer.FriendOrders.Add(this); _customers.Add(customer); } public void RemoveCustomer(Customer customer) { customer.FriendOrders.Remove(this); _customers.Remove(customer); } } class Customer { private HashSet<Order> _orders = new HashSet<Order>(); public IEnumerable<Order> orders { get { return _orders; } } internal HashSet<Order> FriendOrders { get { return _orders; } } public void AddOrder(Order order) { order.AddCustomer(this); } public void RemoveOrder(Order order) { order.RemoveCustomer(this); } }