Of course there would need to have an implicit notion of "next least visible" or "matching visibility" execution path. An internal calling sequence should be directed to an "internal property" if one exists. If it does not exist, the next least visible (but greater then the current) path should be chosen. It should also be possible to specify explicitly, at the call, which visibility path is intended. For example:
myObject.ID.public = 123;
myObject.ID.internal = 123;
The execution path for a property overloaded using a visibility modifier is a static (compile time) decision. The following code block is an example of an overloaded property in C#.
/* NOTE: THIS IS NOT LEGAL C#, causes property already defined error */
public int ID
{
get
{
return data.ID;
}
internal set
{
data.ID = value;
}
set // assumed public
{
modified.ID = value;
}
}