Hiding vs overriding — what does the derived method do in this code? public class Sample { public int x; public virtual void fun() { } } public class DerivedSample : Sample { new public void fun() { } }
C# Programming
Polymorphism
Difficulty: Medium
Choose an option
Answer
Correct Answer: DerivedSample hides the fun() method of the base class.
Explanation
Introduction / Context:In C#, new hides a base member; override replaces it polymorphically. This question distinguishes hiding from overriding.
Given Data / Assumptions:
- Base fun() is virtual.
- Derived fun() uses new, not override.
Concept / Approach:Using new creates a new member that hides the base member when the variable is typed as DerivedSample. Calls through a Sample reference still bind to the base virtual unless the derived used override.
Step-by-Step Solution:
1) Hide: new public void fun() — compile-time hiding.2) Override would be: public override void fun() — runtime polymorphism.Why Other Options Are Wrong:
- B: Through a Sample reference, the base virtual dispatch targets the base unless override is used.
- C: Hiding does not replace for all calls.
- D: You can hide without new; the compiler warns but still hides.
Common Pitfalls:Assuming new implies override-like behavior.
Final Answer:DerivedSample hides the fun() method of the base class.