如何覆盖或扩展.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))
{...}
有可能吗?
答案 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”的现有使用,这不是自动的,但如果可能的话,你的解决方案也不会直接从它继承。