Я думаю, что это действительно очень неприятный вопрос, но я думаю, что на SO
я получу ответ быстрее, чем сам погуглю его:)
Допустим, у меня есть некоторыекласс с конструктором:
public class TestClass {
private readonly IRepository repository;
public TestClass(IRepository repository)
{
this.repository = repository;
// Here is the non-obvious line - it invokes some
// method, which changes the internal contents of
// the repository object.
repository.AddSomething(...);
}
}
А теперь:
IRepository sqlRepository = new SqlRepository(...);
TestClass testClass = new TestClass(sqlRepository);
1) Я не очень хорош в значении/ ссылка передается в C#
- поэтому, пожалуйста, кто-нибудь может дать пошаговое объяснение того, что происходит в этом случае.
2) Есть ли sqlRepository
объект изменяется (я полагаю, нет) и есть ли способ заставить конструктор TestClass
изменить его (я знаю, что это зло, только для меня, чтобы знать)?
3) Могут ли строки repository.AddSomething(...)
и this.repository.AddSomething(...)
в конструкторе иметь одинаковый эффект и почему?
4) Какой эффектreadonly
имеет попытки изменения репозитория в этом примере?