Возможно, это возможно с небезопасным кодом, предложенным havardhu, но это определенно невозможно с безопасным кодом. Важно понимать, почему делать то, что вы пытаетесь сделать, небезопасно. Это не только нарушает инкапсуляцию, но и нарушает безопасность типов. Рассмотрим этот пример.
class Me : IHaveCar
{
BuickCentury myCentury = new BuickCentury(2004);
public Car Car { get { return myCentury; } }
public void Drive()
{
myCentury.CruiseWithAuthority();
}
}
class EvilOilChangeService
{
public void ChangeOil(IHaveCar customer)
{
Car car = customer.Car;
// here's the fictional "replace object in memory" operator
car <<== new VolkswagenBeetle(2003);
}
}
EvilOilChangeService
может создать ситуацию, когда myCentury
ссылается на VolkswagenBeetle
! У меня будут проблемы, когда я попытаюсь выбрать Drive
, потому что VolkswagenBeetle
просто не может CruiseWithAuthority
, как BuickCentury
(особенно если драйвер 6'2 ")
Даже в C / C ++, который разрешает произвольный доступ к памяти, я все равно был бы весьма удивлен кодом, который делает то, что вы хотите. Вот почему большинство других ответов предлагают другой подход или дизайн.