---
title: "What is covariance and contravariance in C#?"  
description: "What is covariance and contravariance in C#?"  
author: "Ponu Maurya"  
published: 2025-06-23  
updated: 2025-06-23  
canonical: https://www.mindstick.com/interview/34274/what-is-covariance-and-contravariance-in-c-sharp  
category: "c#"  
tags: ["c#"]  
reading_time: 1 minute  

---

# What is covariance and contravariance in C#?

## Answer:

Covariance and contravariance allow you to use a more derived or more base type than originally specified.

- **Covariance** (`out`): Enables method to return a more derived type.
- **Contravariance** (`in`): Allows passing a less derived type as an argument.

```cs
IEnumerable<string> strings = new List<string>(); // covariance
Action<object> act = (o) => Console.WriteLine(o);
Action<string> strAct = act; // contravariance (invalid in this case)
```

Applies to **generic interfaces and delegates**.

## Answers

### Answer by Ponu Maurya

## Answer:

Covariance and contravariance allow you to use a more derived or more base type than originally specified.

- **Covariance** (`out`): Enables method to return a more derived type.
- **Contravariance** (`in`): Allows passing a less derived type as an argument.

```cs
IEnumerable<string> strings = new List<string>(); // covariance
Action<object> act = (o) => Console.WriteLine(o);
Action<string> strAct = act; // contravariance (invalid in this case)
```

Applies to **generic interfaces and delegates**.


---

Original Source: https://www.mindstick.com/interview/34274/what-is-covariance-and-contravariance-in-c-sharp

Copyright © MindStick Software Pvt. Ltd. This Markdown version is provided for developers, AI systems, and offline reading.
