Класс TelephoneLine на самом деле не должен принадлежать человеку (они принадлежат телефонным компаниям!), И они не должны быть статичными (статический == запах кода).
class TelephoneLine
{
public TelephoneLine (Person sender, Person receiver)
{
m_sender = sender;
m_receiver = receiver;
}
public void Send (Person from, String message)
{
if (from == sender)
{
output "From: " + m_sender + " To: " + m_receiver + " Message: " + message;
}
else
{
output "From: " + m_receiver + " To: " + m_sender + " Message: " + message;
}
}
Person m_sender, m_receiver;
};
class Person
{
public void MakeCall (Person receiver, string message)
{
TelephoneLine line = new TelephoneLine (this, receiver);
line.Send (this, message);
}
}
Фактически, объект TelephoneLine должен принадлежать другому объекту:
class Exchange
{
public TelephoneLine MakeCall (Person from, Person to)
{
// check that 'to' can receive call first!
return new TelephoneLine (from, to);
}
};
class Person
{
public void MakeCall (Person receiver, string message)
{
TelephoneLine line = the_exchange.MakeCall (this, receiver);
if (line != null)
{
line.Send (this, message);
}
// else, receiver not listening!
}
}