Mel*_*ony 27 .net c# extension-methods
这里的高级成员给了我这个代码:
public static string Truncate(this string value, int maxChars)
{
return value.Length <= maxChars ? value : value.Substring(0, maxChars) + " ..";
}
Run Code Online (Sandbox Code Playgroud)
他说要用它作为扩展方法.但是我在哪里放这个方法呢?看起来它为.Net增加了一些东西
jas*_*son 42
考虑一个StringExtensions如此命名的类:
static class StringExtensions {
public static string Truncate(this string value, int maxChars) {
return value.Length <= maxChars ?
value :
value.Substring(0, maxChars) + " ..";
}
}
Run Code Online (Sandbox Code Playgroud)
确保无论您将此类放入哪个命名空间,都要包含using该命名空间的声明.
因此,举一个完整的例子:
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) + " ..";
}
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
顺便说一下,你没有将它添加到.NET.您甚至没有在课程中添加新方法String.相反,它是一个编译器技巧,使静态方法生成在静态类中,其第一个参数声明为this *TypeName* *valueParameter*where *TypeName*是类型*valueParameter*的名称,并且参数的名称可以作为实例方法出现在类型的实例上类型名称*TypeName*.那是
string t = s.Truncate(5);
Run Code Online (Sandbox Code Playgroud)
由编译器翻译成
string t = StringExtensions.Truncate(s, 5);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8040 次 |
| 最近记录: |