A senior member here gave me this code:
public static string Truncate(this string value, int maxChars) { return value.Length <= maxChars ? value : value.Substring(0, maxChars) + " .."; }
He said to use it as an extension method. But where do I put this method? It looks like it adds something to .Net
To define and call the extension methodDefine a static class to contain the extension method. The class must be visible to client code. For more information about accessibility rules, see Access Modifiers. Implement the extension method as a static method with at least the same visibility as the containing class.
Extension methods enable developers to add custom functionality to data types that are already defined without creating a new derived type. Extension methods make it possible to write a method that can be called as if it were an instance method of the existing type.
No. Extension methods require an instance variable (value) for an object.
In C#, the extension method concept allows you to add new methods in the existing class or in the structure without modifying the source code of the original type and you do not require any kind of special permission from the original type and there is no need to re-compile the original type.
Consider a class named StringExtensions
like so:
static class StringExtensions { public static string Truncate(this string value, int maxChars) { return value.Length <= maxChars ? value : value.Substring(0, maxChars) + " .."; } }
Be sure that whatever namespace you put this class in, you include a using
declaration for that namespace.
Thus, for a full example:
StringExtensions.cs
:
namespace My.Extensions { static class StringExtensions { public static string Truncate(this string value, int maxChars) { return value.Length <= maxChars ? value : value.Substring(0, maxChars) + " .."; } } }
Program.cs
:
using System; using My.Extensions; namespace My.Program { static class Program { static void Main(string[] args) { string s = "Hello, World"; string t = s.Truncate(5); Console.WriteLine(s); Console.WriteLine(t); } } }
By the way, you are not adding it to .NET. You are not even adding a new method to the class String
. Rather, it's a compiler trick that makes static methods living in static classes with their first parameter declared as this *TypeName* *valueParameter*
where *TypeName*
is the name of a type, and *valueParameter*
is the name of the parameter can be made to appear as an instance method on instances of the type with type name *TypeName*
. That is
string t = s.Truncate(5);
is translated by the compiler into
string t = StringExtensions.Truncate(s, 5);
Put it in a static class, and use using
on its namespace.
e.g.
namespace Foo { static class Extensions { public static string Truncate(this string value, int maxChars) { return value.Length <= maxChars ? value : value.Substring(0, maxChars) + " .."; } } }
And then in a different file:
using Foo; //Don't forget this! class Tester { static void Test() { Console.WriteLine("123456".Truncate(3)); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With