C# 在C中继承NetworkInterface#
我在网上搜索了一些继承的例子,但我找不到任何优雅的解决方案。静态方法C# 在C中继承NetworkInterface#,c#,.net,inheritance,network-programming,network-interface,C#,.net,Inheritance,Network Programming,Network Interface,我在网上搜索了一些继承的例子,但我找不到任何优雅的解决方案。静态方法NetworkInterface.GetAllNetworkInterfaces()似乎返回一个名为SystemNetworkInterface的内部实现 基本上,我想将其继承到一个名为ManagedNetworkInterface的类中,并向其添加一些附加功能。有人能想出一个优雅的解决方案吗?我试过了,但每次都有什么东西阻止我前进 编辑1: 通过将实现转换回NetworkInterface然后再转换到ManagedNetwor
NetworkInterface.GetAllNetworkInterfaces()
似乎返回一个名为SystemNetworkInterface
的内部实现
基本上,我想将其继承到一个名为ManagedNetworkInterface
的类中,并向其添加一些附加功能。有人能想出一个优雅的解决方案吗?我试过了,但每次都有什么东西阻止我前进
编辑1:
通过将实现转换回NetworkInterface
然后再转换到ManagedNetworkInterface
来提供实现是否可以接受
…这个例子看起来很混乱
ManagedNetworkInterface mni = (ManagedNetworkInterface)(NetworkInterface)NetworkInterface.GetAllNetworkInterfaces()[0];
编辑2:
我还考虑过使用一个类似合成的模型
public class ManagedNetworkInterface : NetworkInterface
{
private NetworkInterface ni;
public override string Description
{
get { return ni.Description; }
}
//ect...
}
这是个好主意还是坏主意?我将为NetworkInterface编写一个扩展方法
public static class MyExtensions
{
public static void MyMethod(this NetworkInterface ni)
{
//Some Code
}
}
并使用as
ni.MyMethod()
问题已解决。我已经使用composition来继承和实现抽象类NetworkInterface
代码
public class ManagedNetworkInterface : NetworkInterface
{
private NetworkInterface ni;
public override string Description
{
get { return ni.Description; }
}
//ect...
}
新类现在包括几个机制,用于使用IP地址、物理地址、ID、名称等创建ManagedNetworkInterface实例。因为返回的
NetworkInterface
实际上是一个SystemNetworkInterface
,如果您尝试将运行时InvalidCastException
转换为您的ManagedNetworkInterface
类型,您将得到一个运行时InvalidCastException
。@tomfanning,是的,我已经发现了,因此我想问,如果SystemNetworkInterface被转换回NetworkInterface,然后再转换到ManagedNetworkInterface,是否是一个好主意?我觉得它很难看@activwerx:yes composition是一个好主意:通过NetworkInterface
或直接向ManagedNetworkInterface
进行强制转换可产生等效的操作。所讨论的对象是SystemNetworkInterface
,并且只能强制转换为自己的类型,NetworkInterface
或System.object
。考虑一下-框架如何知道用什么填充ManagedNetworkInterface
类型的额外属性?因此,不仅丑陋,而且它完全不起作用。不幸的是,代码必须可移植到.NET2.0(至少目前是如此),所以我相信扩展方法是OOTQ。但是+1表示努力!谢谢
class NetworkAdapter : NetworkInterface
{
private NetworkInterface ni;
public override string Description => _nic.Description;
}