"Naming a property 'Active' shadows Component.Active"
▸ SYMPTOM
You add a public bool Active property to your component for domain logic (e.g. whether a turret is armed). The editor's in-compile phase shows CS0108: 'MyComponent.Active' hides inherited member 'Component.Active' — even when dotnet build was clean. Worse, any code that checks your component's Active flag may be reading the engine's enabled state instead of your domain value, or vice versa.
▸ CAUSE
Component.Active is a real inherited member on the Component base class — it controls whether the component is enabled in the scene. Declaring your own Active property without new hides it, creating ambiguity about which Active is being read or set at any call site.
▸ FIX
Name your domain flag something else:
// DON'T — shadows Component.Active
public bool Active { get; set; }
// DO — unambiguous name
public bool Armed { get; set; }
public bool Enabled { get; set; } // also bad — Component.Enabled exists
public bool IsArmed { get; set; } // clear and distinctAs a rule, check any property name against the Component base class API before declaring it. Common traps: Active, Enabled, Transform, Scene, GameObject.
▸ WHY IT WORKS
C# member hiding is silent unless you explicitly use the new keyword. The editor compiler surfaces the CS0108 warning that dotnet build may suppress or miss. By using a distinct name, there's no ambiguity — your property is yours, and Component.Active remains the engine's enabled toggle.