如何扩展C#内置types,如String?
问候大家…我需要Trim
一个String
。 但是我想要删除string本身中所有重复的空格,不仅在结尾或开始。 我可以用这样的方法来做到这一点:
public static string ConvertWhitespacesToSingleSpaces(string value) { value = Regex.Replace(value, @"\s+", " "); }
我从这里得到了什么 但是我想要在String.Trim()
本身中调用这段代码,所以我认为我需要扩展或重载或重写Trim
方法…有没有办法做到这一点?
提前致谢。
既然你不能扩展string.Trim()。 您可以按照此处所述的方法制作一个扩展方法,用于修剪和减less空白。
namespace CustomExtensions { //Extension methods must be defined in a static class public static class StringExtension { // This is the extension method. // The first parameter takes the "this" modifier // and specifies the type for which the method is defined. public static string TrimAndReduce(this string str) { return ConvertWhitespacesToSingleSpaces(str).Trim(); } public static string ConvertWhitespacesToSingleSpaces(this string value) { return Regex.Replace(value, @"\s+", " "); } } }
你可以像这样使用它
using CustomExtensions; string text = " I'm wearing the cheese. It isn't wearing me! "; text = text.TrimAndReduce();
给你
text = "I'm wearing the cheese. It isn't wearing me!";
可能吗? 是的,但仅限于扩展方法
System.String
类是密封的,所以你不能使用覆盖或inheritance。
public static class MyStringExtensions { public static string ConvertWhitespacesToSingleSpaces(this string value) { return Regex.Replace(value, @"\s+", " "); } } // usage: string s = "test !"; s = s.ConvertWhitespacesToSingleSpaces();
对你的问题有一个肯定的答案。
是的,您可以使用扩展方法扩展现有types。 扩展方法自然只能访问types的公共接口。
public static string ConvertWhitespacesToSingleSpaces(this string value) {...} // some time later... "hello world".ConvertWhitespacesToSingleSpaces()
不,你不能调用这个方法Trim()。 扩展方法不参与重载。 我想编译器甚至应该给你一个详细的错误信息。
扩展方法仅在包含定义方法的types的名称空间正在使用时才可见。
扩展方法!
public static class MyExtensions { public static string ConvertWhitespacesToSingleSpaces(this string value) { return Regex.Replace(value, @"\s+", " "); } }
除了使用扩展方法 – 这里可能是一个好的候选者 – 也可以“包装”一个对象(例如“对象组合”)。 只要包装的表单不包含比被包装的东西更多的信息,则包装的项目可以干净地通过隐式或显式转换进行传递,而不会丢失信息:只是types/接口的更改。
快乐的编码。