Generic interfaces let you create flexible blueprints that work with any data type. This helps you write code that can handle many kinds of data without repeating yourself.
Generic interfaces in C Sharp (C#)
interface IMyInterface<T> { void DoSomething(T item); T GetItem(); }
The <T> after the interface name means it is generic and uses a placeholder type T.
Classes that implement this interface must specify the actual type for T and implement the methods using that type.
T.interface IRepository<T> { void Add(T item); T FindById(int id); }
IRepository for strings. It stores strings in a list.class StringRepository : IRepository<string> { private List<string> items = new(); public void Add(string item) => items.Add(item); public string FindById(int id) => items[id]; }
T.interface IComparer<T> { int Compare(T a, T b); }
This program shows a generic interface IContainer<T> and a class Container<T> that implements it. It stores items of any type. We create containers for int and string and print their items.
using System; using System.Collections.Generic; interface IContainer<T> { void AddItem(T item); T GetItem(int index); } class Container<T> : IContainer<T> { private List<T> items = new(); public void AddItem(T item) => items.Add(item); public T GetItem(int index) => items[index]; } class Program { static void Main() { IContainer<int> intContainer = new Container<int>(); intContainer.AddItem(10); intContainer.AddItem(20); Console.WriteLine(intContainer.GetItem(0)); Console.WriteLine(intContainer.GetItem(1)); IContainer<string> stringContainer = new Container<string>(); stringContainer.AddItem("hello"); stringContainer.AddItem("world"); Console.WriteLine(stringContainer.GetItem(0)); Console.WriteLine(stringContainer.GetItem(1)); } }
Generic interfaces help avoid repeating code for different types.
When implementing a generic interface, you must specify the type or keep it generic.
You can use multiple generic parameters like interface IPair.
Generic interfaces use placeholders for types to make code reusable.
They define methods or properties that work with any specified type.
Classes implement these interfaces by specifying the actual type.
Practice
Solution
Step 1: Understand generic interfaces
Generic interfaces use placeholders (type parameters) to allow flexibility in the data types they work with.Step 2: Identify the purpose
This flexibility means the same interface can be reused with different types, making code more reusable and type-safe.Final Answer:
To allow the interface to work with any data type specified later -> Option AQuick Check:
Generic interface = flexible type [OK]
- Thinking generic interfaces fix one type only
- Confusing generic interfaces with access modifiers
- Assuming generic interfaces auto-implement methods
IContainer with a type parameter T?Solution
Step 1: Recall generic interface syntax
Generic interfaces use angle brackets after the interface name to specify type parameters, likeIContainer<T>.Step 2: Check each option
interface IContainer<T> { } correctly declares a generic interface. interface IContainer { T } is invalid syntax. class IContainer<T> { } uses 'class' instead of 'interface'. interface IContainer<T> () { } has incorrect parentheses.Final Answer:
interface IContainer<T> { } -> Option CQuick Check:
Generic interface syntax = interface Name<T> [OK]
- Using class instead of interface keyword
- Omitting angle brackets for type parameter
- Adding parentheses after interface name
interface IPrinter<T> { void Print(T item); }
class StringPrinter : IPrinter<string> {
public void Print(string item) { Console.WriteLine(item); }
}
var printer = new StringPrinter();
printer.Print("Hello World");Solution
Step 1: Understand interface implementation
The classStringPrinterimplementsIPrinter<string>and defines thePrintmethod to write the string to console.Step 2: Trace method call
ThePrintmethod is called with "Hello World", so it prints this string to the console.Final Answer:
Hello World -> Option AQuick Check:
Implemented method prints input string [OK]
- Expecting compile error for correct generic usage
- Confusing interface with abstract class
- Thinking Print method returns a value
interface IRepository<T> {
void Add(T item);
}
class Repository : IRepository {
public void Add(object item) { /* implementation */ }
}Solution
Step 1: Check interface implementation
The interfaceIRepositoryis generic and requires a type parameter<T>. The classRepositoryimplements it without specifying this type.Step 2: Identify the fix
The class must specify the type parameter, for exampleIRepository<object>, to correctly implement the interface.Final Answer:
Class Repository must specify the type parameter when implementing IRepository -> Option BQuick Check:
Generic interface requires type parameter [OK]
- Omitting type parameter in implementation
- Assuming interface methods must return values
- Thinking classes can't implement interfaces
interface ITransformer<T> {
T Transform(T input);
}
class IntDoubler : ITransformer<int> {
public int Transform(int input) => input * 2;
}
class StringRepeater : ITransformer<string> {
public string Transform(string input) => input + input;
}
var doubler = new IntDoubler();
var repeater = new StringRepeater();
Console.WriteLine(doubler.Transform(5));
Console.WriteLine(repeater.Transform("Hi"));Solution
Step 1: Analyze IntDoubler.Transform
This method doubles the integer input. For input 5, output is 5 * 2 = 10.Step 2: Analyze StringRepeater.Transform
This method repeats the string input twice. For input "Hi", output is "Hi" + "Hi" = "HiHi".Final Answer:
10 HiHi -> Option DQuick Check:
Int doubled = 10, string repeated = HiHi [OK]
- Mixing outputs of different classes
- Forgetting string concatenation doubles text
- Assuming Transform returns original input
Ready to prove it?
Pass the test and this pattern moves unknown
