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) + " ..";
}
他说要用它作为扩展方法.但是我在哪里放这个方法呢?看起来它为.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) + " ..";
    }
}
确保无论您将此类放入哪个命名空间,都要包含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) + " ..";
        }
    }
}
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);
        }
    }
}
顺便说一下,你没有将它添加到.NET.您甚至没有在课程中添加新方法String.相反,它是一个编译器技巧,使静态方法生成在静态类中,其第一个参数声明为this *TypeName* *valueParameter*where *TypeName*是类型*valueParameter*的名称,并且参数的名称可以作为实例方法出现在类型的实例上类型名称*TypeName*.那是
string t = s.Truncate(5);
由编译器翻译成
string t = StringExtensions.Truncate(s, 5);