使用托管C ++ / CLI中的C#扩展方法

如果我的术语有点偏离,请原谅我。 我对托管C ++ / CLI的了解非常有限。

我有一个MFC应用程序,使用启用了/ clr选项的DLL。 这个dll使用几个C#dll与使用WCF的服务器通信。 在大多数情况下,这工作正常。

在其中一个C#dll中,我向System.Net.IPAddress类添加了一个扩展方法,该类将检索IPAddress对象的子网掩码(使用UnicastIPAddressInformation类及其IPv4Mask)。 扩展方法在C#方面运行良好,但我无法弄清楚如何在托管C ++ / CLI代码中使用它。

首先,这甚至可能吗? 如果是这样,托管C ++ / CLI端的语法是什么样的? 我必须使用/ clr:pure选项才能使用吗?

以下是扩展方法的示例:

using System.Net; using System.Net.NetworkInformation; public static class IPAddressExtensions { public static IPAddress GetSubnetMask(this IPAddress address) { UnicastIPAddressInformation addressInfo = address.GetAddressInformation(); // elided return ((addressInfo != null) ? addressInfo.IPv4Mask : null); } } 

在我的托管C ++代码中,如果可能的话,我将如何使用此扩展方法?

 unsigned long bytes= 0x010000FF; // example address - 127.0.0.1 IPAddress^ address = gcnew IPAddress(BitConverter::GetBytes(bytes)); IPAddress^ subnet = address->GetSubnetMask(); // how do I do this??? 

你必须像静态方法一样调用它:

 IPAddressExtensions::GetSubnetMask(address); 

“扩展”方法更多的是编译技巧而不是CLR中的差异。