<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/extension-members-in-net-7zlzpyxgv" -->

---
title: Extension Members in .NET | daily.dev
description: C# 14, shipping with .NET 10, introduces extension members via a new 'extension' keyword that expands traditional extension methods. Unlike classic static...
canonical: https://daily.dev/posts/extension-members-in-net-7zlzpyxgv
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Extension Members in .NET | daily.dev
og:description: C# 14, shipping with .NET 10, introduces extension members via a new 'extension' keyword that expands traditional extension methods. Unlike classic static...
og:url: https://daily.dev/posts/extension-members-in-net-7zlzpyxgv
og:image: https://api.daily.dev/og/posts/7ZlzpYXgv.png
og:image:alt: Extension Members in .NET
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Extension Members in .NET

**[NikolaTech](https://daily.dev/sources/nikolatech)** · 3 min read · 0 upvotes · 0 comments

## Summary

C# 14, shipping with .NET 10, introduces extension members via a new 'extension' keyword that expands traditional extension methods. Unlike classic static extension methods, extension blocks let developers group multiple methods and define extension properties (e.g., an IsEmpty property on IEnumerable<T>) for a receiver type, with support for generics and constraints declared once per block. The compiler still lowers these to regular static methods, preserving backward compatibility.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://nikolatech.net/blogs/extension-members-dotnet>

## Questions this post answers

### What are extension members in C# 14 and how do they differ from extension methods?

C# 14 introduces an 'extension' keyword that defines extension blocks capable of holding multiple methods and properties for a given receiver type. Traditional extension methods only allow static methods and cannot add properties or instance members. Extension blocks can also be made generic with constraints declared once, and the compiler still lowers them to regular static methods for backward compatibility.

_Explore how daily.dev surfaces C# language updates for developers tracking .NET 10 changes._

### How do you add a property like IsEmpty to IEnumerable<T> using C# 14 extension members?

Declare a generic extension block with 'extension<T>(IEnumerable<T> source)' and define 'public bool IsEmpty => !source.Any();' inside it. Once defined, calling code can use 'numbers.IsEmpty' just like a native property, returning false for a non-empty collection, without modifying the original IEnumerable<T> type.

_daily.dev helps developers adopting C# 14 syntax find practical extension property examples._

## Similar posts on daily.dev

- [C\# Extension Members](https://daily.dev/posts/c-extension-members-1anekbztp) · JetBrains · 18 upvotes · 1 comments
- [Extension Properties: C\# 14’s Game-Changer for Cleaner Code](https://daily.dev/posts/extension-properties-c-14-s-game-changer-for-cleaner-code-aawdgf4pc) · Telerik · 0 upvotes · 0 comments
- [The best new features of C\# 14](https://daily.dev/posts/the-best-new-features-of-c-14-6gsbbjwv4) · InfoWorld · 46 upvotes · 4 comments
- [Indexer extension members in C\# 15](https://daily.dev/posts/indexer-extension-members-in-c-15-yabwnagyx) · Damir's Corner · 17 upvotes · 2 comments

---

Tags: [#.net](https://daily.dev/tags/.net), [#c#](https://daily.dev/tags/c#)

[View this post on daily.dev](https://daily.dev/posts/extension-members-in-net-7zlzpyxgv)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Extension Members in .NET","url":"https://daily.dev/posts/extension-members-in-net-7zlzpyxgv","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/extension-members-in-net-7zlzpyxgv"},"datePublished":"2026-10-04T13:05:59.728Z","dateModified":"2026-10-04T13:13:42.683Z","description":"C# 14, shipping with .NET 10, introduces extension members via a new 'extension' keyword that expands traditional extension methods. Unlike classic static...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/9282fd45bf4284ab9766c5e55a615edc?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/9282fd45bf4284ab9766c5e55a615edc?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"NikolaTech","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"NikolaTech","logo":"https://media.daily.dev/image/upload/s--1h2fO6FL--/f_auto,q_auto/v1791119050/logos/nikolatech?_a=BAMAMicg0","url":"https://daily.dev/sources/nikolatech"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/extension-members-in-net-7zlzpyxgv","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":".net,c#","timeRequired":"PT3M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"NikolaTech","item":"https://daily.dev/sources/nikolatech"},{"@type":"ListItem","position":3,"name":"Extension Members in .NET"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/extension-members-in-net-7zlzpyxgv#faq","mainEntity":[{"@type":"Question","name":"What are extension members in C# 14 and how do they differ from extension methods?","acceptedAnswer":{"@type":"Answer","text":"C# 14 introduces an 'extension' keyword that defines extension blocks capable of holding multiple methods and properties for a given receiver type. Traditional extension methods only allow static methods and cannot add properties or instance members. Extension blocks can also be made generic with constraints declared once, and the compiler still lowers them to regular static methods for backward compatibility. Explore how daily.dev surfaces C# language updates for developers tracking .NET 10 changes."}},{"@type":"Question","name":"How do you add a property like IsEmpty to IEnumerable<T> using C# 14 extension members?","acceptedAnswer":{"@type":"Answer","text":"Declare a generic extension block with 'extension<T>(IEnumerable<T> source)' and define 'public bool IsEmpty => !source.Any();' inside it. Once defined, calling code can use 'numbers.IsEmpty' just like a native property, returning false for a non-empty collection, without modifying the original IEnumerable<T> type. daily.dev helps developers adopting C# 14 syntax find practical extension property examples."}}]}
```

