C#.NET generics — What will the following code do? public class TestCuriousTab { public void TestSub<M>(M arg) { Console.Write(arg); } } class MyProgram { static void Main(string[] args) { TestCuriousTab tab = new TestCuriousTab(); tab.TestSub("CuriousTab "); tab.TestSub(4.2f); } }

Difficulty: Easy

Correct Answer: Program will compile and on execution will print: CuriousTab 4.2

Explanation:


Introduction / Context:
This question assesses understanding of generic methods declared inside non-generic classes and how type inference and Console.Write formatting behave at runtime.



Given Data / Assumptions:

  • TestCuriousTab is a non-generic class.
  • Method TestSub(M arg) is a generic method.
  • Calls are made with a string and a float (Single).


Concept / Approach:
In C#, a class need not be generic to contain generic methods. The compiler infers M from the argument type at each call site (string then Single). Console.Write writes values back-to-back without newline; string "CuriousTab " includes a trailing space; Single value 4.2f prints as 4.2 with invariant formatting in typical console settings.



Step-by-Step Solution:

First call: M inferred as string → prints "CuriousTab ".Second call: M inferred as Single → prints "4.2".Combined output (no newline): "CuriousTab 4.2".


Verification / Alternative check:
Change Console.Write to Console.WriteLine to see each on a new line; or pass an int to verify type inference continues to work.



Why Other Options Are Wrong:

  • B: Non-generic classes can have generic methods.
  • C/D: There is no compile-time or runtime error; generics are used correctly.
  • E: Option A is correct.


Common Pitfalls:
Believing only generic classes can define generic methods; confusing Write with WriteLine when predicting exact output spacing.



Final Answer:
Program will compile and on execution will print: CuriousTab 4.2

More Questions from Generics

Discussion & Comments

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