Звучит как странное требование.Переменная - это не что иное, как ссылка на объект.Имя этой ссылки никоим образом не связано с чем этой переменной.Таким образом, объект, на который имеется ссылка, ничего не знает о своих ссылках.На самом деле вы можете иметь даже несколько ссылок на один и тот же Foo
-экземпляр.Так как же instance знать, на какую переменную вы ссылаетесь?Итак, что должно произойти в следующем примере:
var f = new Foo();
var b = f;
Теперь у вас есть две ссылки на один и тот же экземпляр Foo
.Экземпляр не может знать, какой из шлангов подходит, если вы не предоставите эту информацию ему, используя параметр (например, своему конструктору).Ситуация становится еще хуже, если у вас есть фабрика, создающая ваш Foo
-экземпляр:
void CreateFoo()
{
return new Foo();
}
// ...
var f = CreateFoo();
Теперь у вас есть еще одно косвенное указание, конструктор Foo
наверняка не сможет всплыть, хотя все слои в вашем вызове-стекать, пока не достигнет какого-либо назначения , где он может получить действительное имя.На самом деле возможно, что вы даже не назначаете свой экземпляр на что-нибудь - хотя это просто хорошая идея:
CreateFoo(); // create an instance and throw it away
В любом случае, если вы хотите установить член вДля экземпляра какого-либо значения вы должны предоставить это значение для экземпляра.Ответ Патрика показывает, как это сделать.