c# -我可以从一个函数映射调用到实际调用另一个函数吗?
本文关键字:函数 调用 映射 另一个 一个 我可以 | 更新日期: 2023-09-27 18:11:58
这是我的情况:我不得不暂时从。net 4降级到。net 3.5一段时间。但是,我希望以后能够尽快地迁移回来。
里面有一些函数。我们用的NET4
没有3.5
的等价物,比如String.IsNullOrWhitespace
。我可以自己实现这个函数,但是我不想为了使用另一个静态类(如MyString.IsNullOrWhitespace
)而更新几十个调用。
是否有一种方法,也许是利用一些创造性的"使用"语法将所有引用映射到String.IsNullOrWhitespace
到MyString.IsNullOrWhitespace?
,或者c#编译器是否有任何其他特性或功能可以做到这一点?或者我只需要全局搜索并将"String.IsNullOrWhitespace"
替换为"MyString.IsNullOrWhitespace"
?谢谢!
我想你是在寻找扩展方法。
http://msdn.microsoft.com/en-us/library/bb383977.aspx你根本不需要修改你的代码。你可以实现你自己的IsNullOrWhiteSpace,它直接附加到字符串类上。前提是您引用了扩展方法所在的名称空间。
编辑:我刚刚意识到IsNullOrWhiteSpace是一个静态方法,您不能创建静态扩展方法。但也许你可以这样做:
namespace ExtensionMethods
{
public static class MyExtensions
{
public static bool IsNullOrWhiteSpace(this String str)
{
// ToDo: implement this
}
}
}
将在string的实际实例中调用,即:
if(myString.IsNullOrWhiteSpace())
,它实际上比你当前所做的要短一些:
if(string.IsNullOrWhiteSpace(myString))
如果您想在从3.5升级到4.0时将代码更改到最低限度,您可以创建Neil N建议的扩展方法。当你升级时,你可以重写扩展方法来包装框架的静态方法,而不是改变所有的调用地点:
之前namespace ExtensionMethods
{
public static class MyExtensions
{
public static bool IsNullOrWhiteSpace(this String str)
{
// ToDo: implement this
}
}
}
后namespace ExtensionMethods
{
public static class MyExtensions
{
public static bool IsNullOrWhiteSpace(this String str)
{
return string.IsNullOrWhiteSpace(str);
}
}
}
如果你使用ReSharper这样的重构工具,你可以使用"内联方法"重构,这将比全局搜索和替换操作更安全、更容易。