"Extension-Method MI Polymorphism Problem Example"

// ENTITIES
public class ArmourPowerupEntity : Entity, IModelledEntity {
    private const float DEFAULT_ARMOUR_SCALING = 1f;
        private bool pickedUp = false;
 
    public ArmourPowerupEntity(Vector3 powerupPosition)
        : this(powerupPosition, DEFAULT_ARMOUR_SCALING) { }
 
    public ArmourPowerupEntity(Vector3 powerupPosition, float customScaling) {
        this.SetModel(ModelDatabase.ArmourModel);
        this.SetPosition(powerupPosition);
        this.SetScaling(customScaling);
    }
 
    public void PickUpArmour() {
        pickedUp = true;
    }
 
    public bool CameraCanSeeThis(Camera camera) {
        return !pickedUp && ComponentExtensions.CameraCanSeeThis(this, camera); // Powerup only visible if not already taken
    }
}


Code snippet taken from "Simulating Multiple Inheritance In C#".