Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中继承NetworkInterface#_C#_.net_Inheritance_Network Programming_Network Interface - Fatal编程技术网

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;
}