AwesomeMod is written with MSIL and is not required to adhere to encapsulation rules, as MSIL ignores all of these things. It also explodes spectacularly when misused. As mentioned in another thread, the code we deal in looks a lot like this:
L_0000: ldarg.0
L_0001: callvirt instance class Sims3.Gameplay.CAS.SimDescription Sims3.Gameplay.Actors.Sim::get_SimDescription()
L_0006: callvirt instance bool Sims3.Gameplay.CAS.SimDescription::get_TeenOrBelow()
L_000b: ldarg.1
L_000c: callvirt instance class Sims3.Gameplay.CAS.SimDescription Sims3.Gameplay.Actors.Sim::get_SimDescription()
L_0011: callvirt instance bool Sims3.Gameplay.CAS.SimDescription::get_TeenOrBelow()
L_0016: bne.un.s L_002b
L_0018: ldarg.1
L_0019: callvirt instance class Sims3.Gameplay.Socializing.Genealogy Sims3.Gameplay.Actors.Sim::get_Genealogy()
L_001e: ldarg.0
L_001f: callvirt instance class Sims3.Gameplay.Socializing.Genealogy Sims3.Gameplay.Actors.Sim::get_Genealogy()
L_0024: callvirt instance bool Sims3.Gameplay.Socializing.Genealogy::IsParentOrStepParent(class Sims3.Gameplay.Socializing.Genealogy)
L_0029: brfalse.s L_002d
To make a C# compiler accept such craziness involves armtwisting it into believing those are public functions, by rebuilding it from the MSIL with the private bits exposed.