我想创建一个适用于String
对象的方法,该方法将返回修改后的String
:
String s = "blabla";
String result = s.MyNewMethod();
我尝试创建新的课程String
,但关键字this
似乎未知:
class String {
public String MyNewMethod() {
String s = this.Replace(',', '.'); // Replace method is unknown here
// ...
}
}
答案 0 :(得分:8)
您需要定义extension method:
public static class StringExtensions {
public static string MyNewMethod(this string s) {
// do something and return a string
}
}
请注意,扩展方法为static
,并在static
顶级类中定义。
答案 1 :(得分:1)
我认为这需要更多解释。
String是.NET中的密封类,与大多数OO类型安全语言一样。这意味着你不能将字符串子类化。以下是关于字符串的一些很好的信息:http://www.yoda.arachsys.com/csharp/strings.html。为什么他们不能被分类。
要在.net中创建子类,必须使用以下语法:
// here "Test is a subclass of Test2"
public class Test : Test2 {
}
Jason提到的扩展方法非常适合为密封类添加功能。扩展方法永远不能覆盖类中已存在的函数。在编译时,它们的优先级低于实例方法。由于扩展方法不在类中,因此无法访问内部和私有字段。