C#中扩展方法,C++语言如何实现类似的扩展?
2011-03-08 18:31
525 查看
今天看了一个C#的程序,是关于扩展方法的代码编写和调用。想了好半天但是还是没能参透其中奥妙。
以我个人目前菜鸟的水平,如果要对一个类添加额外的方法除了在本类中进行加方法以外,另外一个方法就是继承该类,在子类中添加方法。
但在C# 语言里出现了一个新的技术(解决方案)名叫扩展方法。
C#代码如下:
class Program
{
static void Main(string[] args)
{
// 调用扩展方法
Console.WriteLine("123456".MD5Hash());
Console.WriteLine("1".In(new[] { "1", "2", "3" }));
}
}
public static class helper
{
public static string MD5Hash(this string s)
{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "MD5");
}
public static bool In(this object o, IEnumerable b)
{
foreach (object obj in b)
{
if (obj == o)
return true;
}
return false;
}
}
运行结果:
C#语言居然可以这样子实现,佩服!
我把这个贴出来就是希望高人看到。解答下原因,如果用C++实现类似C#扩展方法一样的功能,那么这样的C++代码该怎样写?
在CSDN上看到一哥们给的答案,自己看了网址链接举得还可以,就贴上来了。
using namespace System; namespace CPPLib
{
[System::Runtime::CompilerServices::Extension]
public ref class StringExtensions abstract sealed
{
public:
[System::Runtime::CompilerServices::Extension]
static bool MyIsNullOrEmpty(String^ s)
{
return String::IsNullOrEmpty(s);
}
};
}
参考:
How do I declare a method in C++/CLI that will be seen as an extension method in C#?
http://stackoverflow.com/questions/995038/how-do-i-declare-a-method-in-c-cli-that-will-be-seen-as-an-extension-method-in
以我个人目前菜鸟的水平,如果要对一个类添加额外的方法除了在本类中进行加方法以外,另外一个方法就是继承该类,在子类中添加方法。
但在C# 语言里出现了一个新的技术(解决方案)名叫扩展方法。
C#代码如下:
class Program
{
static void Main(string[] args)
{
// 调用扩展方法
Console.WriteLine("123456".MD5Hash());
Console.WriteLine("1".In(new[] { "1", "2", "3" }));
}
}
public static class helper
{
public static string MD5Hash(this string s)
{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "MD5");
}
public static bool In(this object o, IEnumerable b)
{
foreach (object obj in b)
{
if (obj == o)
return true;
}
return false;
}
}
运行结果:
C#语言居然可以这样子实现,佩服!
我把这个贴出来就是希望高人看到。解答下原因,如果用C++实现类似C#扩展方法一样的功能,那么这样的C++代码该怎样写?
在CSDN上看到一哥们给的答案,自己看了网址链接举得还可以,就贴上来了。
using namespace System; namespace CPPLib
{
[System::Runtime::CompilerServices::Extension]
public ref class StringExtensions abstract sealed
{
public:
[System::Runtime::CompilerServices::Extension]
static bool MyIsNullOrEmpty(String^ s)
{
return String::IsNullOrEmpty(s);
}
};
}
参考:
How do I declare a method in C++/CLI that will be seen as an extension method in C#?
http://stackoverflow.com/questions/995038/how-do-i-declare-a-method-in-c-cli-that-will-be-seen-as-an-extension-method-in
相关文章推荐
- 如何:实现和调用自定义扩展方法(C# 编程指南)
- 扩展 delphi 泛型 以实现类似lambda功能 , C#中的any count first last 等扩展方法
- 详解Kotlin中如何实现类似Java或C#中的静态方法
- 扩展 delphi 泛型 以实现类似lambda功能 , C#中的any count first last 等扩展方法
- C#实现类似jQuery的方法连缀功能
- Java中利用MessageFormat对象实现类似C# string.Format方法格式化
- 在C#中使用装饰器模式和扩展方法实现Fluent Interface
- C#实现类似"hello $world"的格式化字符串方法
- C#实现类似新浪微博长URL转短地址的方法
- C# 实现和调用自定义扩展方法
- C# 实现和调用自定义扩展方法
- (转)AjaxPro实现机制探讨——Ajax是如何调用服务器端C#方法?
- 原生js实现复制对象、扩展对象 类似jquery中的extend()方法
- 《模式——工程化实现及扩展》(设计模式C# 版)《模板方法模式 Template》——“自我检验"
- 在SQL中如何实现类似C#的switch语句
- C#扩展方法实现
- c#中实现类似js的Eval方法
- C# Webservice中如何实现方法重载--(方法名同名时出现的问题)
- Java中利用MessageFormat对象实现类似C# string.Format方法格式化
- (转)AjaxPro实现机制探讨——Ajax是如何调用服务器端C#方法?