- I have a class A that is inherited from B.
- A as some readonly properties that I want to modify from B
- Hiding those properties with new is not a suitable option, cause the base class has some functions that use its own properties...
- Can't use the override keyword, cause the properties are not marked as abstract, virtual nor override
So I'd like to know whether from the inherited class (B) I can totally recreate the actual instance of my object to access those readonly properties.
For example and for a better explaination, for a class inheriting Tuple, if it was possible, I would do something like this:
public new T3 Item3
{
get { return item3; }
set
{
item3 = value;
base = new Tuple<T1, T2, T3>(Item1, Item2, Item3); // Not valid
}
}
I can't see how to do this?
A tuple is immutable, so you can't change its values. When you have immutable objects, the way to change them is to return a new object with the desired properties changed. So if you want to stick with tuples, you could do something like this:
And use it like this:
But it's a little bit painful to write all those methods. So if you need many of them, better just do this:
You could even have a wrapper type that you'd use to reference the tuple from different places in your code, so that any "changes" could be visible:
All this, though, feels very awkward. Maybe you could better explain the essential problem you're having so that better answers could be provided. Maybe you don't really need a tuple after all, just something more specific to your domain.