diff --git a/README.md b/README.md index 0b9fd70..b0b6e2b 100644 --- a/README.md +++ b/README.md @@ -9,11 +9,94 @@
-### About +## About X10D (pronounced *extend*), is a .NET package that provides extension methods for numerous types. The purpose of this library is to simplify a codebase by reducing the need for repeated code when performing common operations. Simplify your codebase. Take advantage of .NET. Use extension methods. *(I'm also [dogfooding](https://www.pcmag.com/encyclopedia/term/dogfooding) this library, so there's that.)* +### What are extension methods? + +Extension methods are a clever .NET feature that augment existing types with new functionality. They are defined as +static methods in a static class, and are called as if they were instance methods on the type they are extending. Take, +for example, the following code: + +```csharp +public static class Program +{ + public static void Main() + { + string str = "Hello, world!"; + Console.WriteLine(str.Reverse()); + } +} + +public static class StringExtensions +{ + public static string Reverse(this string str) + { + char[] chars = str.ToCharArray(); + Array.Reverse(chars); + return new string(chars); + } +} +``` + +This will print `!dlrow ,olleH` to the console. The `Reverse` method is defined in the `StringExtensions` class, yet is +called as if it were an instance method on the `str` variable, even though it's not. + +### Why use extension methods? + +Extension methods were introduced when LINQ was added to .NET. LINQ is a set of extension methods that provide a way to +query, filter, and transform data. If you were to access LINQ's methods statically, you would have to write code like +this: + +```csharp +public static class Program +{ + public static void Main() + { + int[] numbers = { 1, 2, 3, 4, 5 }; + IEnumerable