C#.NET — Interface and class implementation details: analyze this code. interface IMyInterface { void fun1(); int fun2(); } class MyClass : IMyInterface { void fun1() { } int IMyInterface.fun2() { return 0; } } Which statement best describes the situation?

Difficulty: Easy

Correct Answer: MyClass is an abstract class (as written) because fun1 is not publicly implemented.

Explanation:

Introduction / Context:This problem tests understanding of interface implementation visibility and explicit interface members in C#. A class must supply public implementations for interface members unless it uses explicit interface implementation syntax for each member.

Given Data / Assumptions:

  • IMyInterface declares void fun1() and int fun2().
  • MyClass implements IMyInterface.
  • MyClass defines fun1 without an access modifier (thus private by default in a class).
  • MyClass explicitly implements fun2 as int IMyInterface.fun2().

Concept / Approach:Interface members are implicitly public contracts. To satisfy them, a class must implement them as public members or via explicit interface implementation. A method with no access modifier in a class is private; a private fun1 does not satisfy IMyInterface.fun1(). Therefore, the compiler treats MyClass as not providing a valid implementation for fun1. With an unimplemented contract, MyClass cannot be instantiated as a non-abstract class.

Step-by-Step Solution:

Check fun1: declared “void fun1()” with default private visibility → does not implement IMyInterface.fun1(). Check fun2: explicitly implemented “int IMyInterface.fun2()” → valid but accessible only via IMyInterface reference. Result: MyClass fails to implement fun1 publicly (or explicitly), so the type would need to be abstract, or fun1 must be declared public to compile as concrete.

Verification / Alternative check:Add “public void fun1() { }” — the class compiles as a concrete type. Or change fun1 to explicit interface implementation “void IMyInterface.fun1() { }”.

Why Other Options Are Wrong:

  • A/B: Interfaces can declare methods (and other member signatures).
  • C: Method dispatch tables are a runtime concern and not removed here.
  • E: fun1 could be public instead; explicit syntax is not mandatory.

Common Pitfalls:Forgetting default accessibility (private) on class members; misunderstanding that explicit interface members are only accessible via the interface reference.

Final Answer:MyClass is an abstract class (as written) because fun1 is not publicly implemented.

More Questions from Interfaces

Discussion & Comments

No comments yet. Be the first to comment!
Join Discussion