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