Reputation: 648
I have this piece of code:
class MyClass
{
public class MySubClass
{
public int One { private set; public get; }
public int Two { private set; public get; }
public int Three { private set; public get; }
};
public MySubClass ObjectMySubClass { private set; public get; }
private void SetSomething()
{
ObjectMySubClass.One = 5; //can do that
}
}
How i can make that my One, Two and Three variables can be read outside class but setted just in MyClass?
MyClass obj = new MyClass();
obj.ObjectMySubClass.One = 5; //can't
int value = obj.ObjectMySubClass.One; //can do that
Upvotes: 1
Views: 57
Reputation: 863
One way is Use Constructors:
class MyClass
{
public class MySubClass
{
public int One { private set; get; }
public int Two { private set; get; }
public int Three { private set; get; }
public MySubClass(int one, int two, int three)
{
this.One = one;
this.Two = two;
this.Three = three;
}
};
public MySubClass ObjectMySubClass { private set; get; }
private void SetSomething()
{
this.ObjectMySubClass = new MySubClass(1, 2, 3);
}
}
Then:
MyClass obj = new MyClass();
//obj.ObjectMySubClass.One = 5; //can't
//obj.ObjectMySubClass = new MyClass.MySubClass(1, 2, 3); //can't
int value = obj.ObjectMySubClass.One; //can do that
Upvotes: 0
Reputation: 125610
Unfortunately I don't think you can do it using just access modifiers. You can add additional interface just readonly properties and hide MySubClass
to be private:
class MyClass
{
public interface IMySubClass
{
int One { get; }
int Two { get; }
int Three { get; }
}
private class MySubClass : IMySubClass
{
public int One { set; get; }
public int Two { set; get; }
public int Three { set; get; }
};
private MySubClass _objectMySubClass;
public IMySubClass ObjectMySubClass
{
get { return _objectMySubClass; }
}
private void SetSomething()
{
_objectMySubClass.One = 5; //can do that
}
}
Upvotes: 1