可以在.net中扩展String类

时间:2009-02-08 14:26:07

标签: c# .net

如何覆盖或扩展.net主类。例如

public class String
{
    public boolean contains(string str,boolean IgnoreCase){...}
    public string replace(string str,string str2,boolean IgnoreCase){...}
}

string aa="this is a Sample";
if(aa.contains("sample",false))
{...}

有可能吗?

4 个答案:

答案 0 :(得分:22)

String类是密封的,因此您无法继承它。扩展方法是您最好的选择。它们与实例方法具有相同的感觉,而没有继承成本。

public static class Extensions {
  public static bool contains(this string source, bool ignoreCase) {... }
}

void Example {
  string str = "aoeeuAOEU";
  if ( str.contains("a", true) ) { ... }
}

您需要使用VS 2008才能使用扩展方法。

答案 1 :(得分:2)

String类是密封的,因此您无法扩展它。如果要添加功能,可以使用扩展方法或将其包装在自己的类中,并提供所需的任何其他功能。

答案 2 :(得分:1)

通常,您应该尝试查看是否有其他方法可以以类似的方式满足您的需求。对于您的示例,Contains实际上是IndexOf的包装方法,如果返回的值大于0,则返回true,否则返回false。实际上,IndexOf方法有许多重载,其中一个是IndexOf( string, StringComparison ): Int32,可以指定它来尊重或忽略大小写。

有关详细信息,请参阅String.IndexOf Method (String, StringComparison) (System),尽管示例有点奇怪。

有关使用StringComparison枚举时可用的不同选项,请参阅StringComparison Enumeration (System)

答案 3 :(得分:0)

您还可以使用适配器模式添加其他功能。您可以执行运算符重载以使其感觉像内置字符串。当然,对于“string”的现有使用,这不是自动的,但如果可能的话,你的解决方案也不会直接从它继承。