C# свойство с приватным установщиком: почему новый [..class..] .. { private property initializer = ... } работает?
У меня есть этот пример кода:
static class Program
{
var x = new TestClass { TestList = { "Peter", "Paul" } };
// x.TestList is loaded with 3 string elements: "Hi there", "Peter", "Paul"
}
public class TestClass
{
public List<string> TestList {get; private set;}
public TestClass()
{
TestList = new List<string>() { "Hi there" };
}
}
Когда я выполняю этот код, x.TestList
загружается с 3 строковыми элементами: "Hi there", "Peter", "Paul"
Вопросы
Почему C# допускает такую инициализацию? У меня есть частный сеттер на
TestList
так почему это разрешено?Почему в результате
x
список состоит из 3 элементов, представляющих собой объединение кода инициализации, выполняемого в конструкторе без параметров и в инициализаторе класса, используемом при создании новогоTestClass
объект создан? Почему бы не 1 или 2 объекта, содержащиеся в списке вместо этого?
3. [НАИБОЛЕЕ ВАЖНО]: как я могу предотвратить такое поведение, чтобы предотвратить внедрение кода pe. на свойствах строки?
Благодарю.