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?
Private set on myName means you can only initialize (set) it from something that is a member of MyClass. For example:
(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.