Private-setter properties in C# 3.0 object initialization
.net, c#-3.0, initialization, object
Solution
Private set on myName means you can only initialize (set) it from something that is a member of MyClass. For example:
public class MyClass {
public string myName { get; private set; }
public string myId { get; set; }
public static MyClass GetSampleObject() {
MyClass mc = new MyClass
{
myName = "Whatever",
myId = "1234"
};
return mc;
}
}
(I copied and pasted your initialization code into the GetSampleObject method).
But if you try to set it outside MyClass, you get a compiler error, because private is private.
Problem
If I have the following code: ``` public class MyClass { public string myName { get; private set; } public string myId { get; set; } } ``` A private compiler-generated variable is created for the setter. I want the setter not to be accessible for object initialization only. But, how do I get to initially set the myName variable? Reading about object initialization I found the following: ... it’s read-only and the private field representing the underlying storage has a compiler-generated name that we cannot use in a constructor to assign to it. The solution is to use [...] object initializers The solution would be, then, to use: ``` MyClass mc = new MyClass { myName = "What ever", myId = "1234" }; ``` But this ends up in a compiler error sayin that: The property or indexer 'MyClass.MyClass.myName' cannot be used in this context because the set accessor is inaccessible So, is there a way to achieve setting this value using object initialization? If there is, what is the correct way to do it?