2011-09-26 175 views
2

我想创建适用于String对象的方法的方法,这将返回一个修改后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 
     // ... 
    } 
} 

回答

8

您需要定义一个extension method

public static class StringExtensions { 
    public static string MyNewMethod(this string s) { 
     // do something and return a string 
    } 
} 

请注意,扩展方法是static,并在static顶级类中定义。

+0

正是我想要的。谢谢。 – Otiel

1

我认为这需要更多的解释。

  1. 字符串是.NET中的密封类,与大多数OO类型安全语言一样。这意味着你不能继承字符串。这里有一些关于字符串的很好的信息:http://www.yoda.arachsys.com/csharp/strings.html。为什么他们不能被分类。

  2. 要在你必须使用下面的语法.NET的子类:由Jason提到

    // here "Test is a subclass of Test2" 
    public class Test : Test2 { 
    
    } 
    
  3. 扩展方法是非常适合添加功能的密封类。扩展方法不能覆盖已存在于类中的函数。在编译时,它们比实例方法具有更低的优先级。由于扩展方法不在类内,因此不能访问内部和私有字段。

+0

他们无法访问他们正在“扩展”的类的内部和私有字段与他们“静态”无关。 – jason

+0

是的,这是真的。 :) – albertjan

+0

感谢您的信息,这很有用。每天学习越来越多:) – Otiel

相关问题