0

상속 된 예제 인 System.Net.NetworkInformation.NetworkInterface을 웹에서 검색했지만 이에 대한 우아한 해결책은 없습니다. 정적 메서드 NetworkInterface.GetAllNetworkInterfaces()SystemNetworkInterface이라는 내부 구현을 반환합니다.C#에서 NetworkInterface 상속

기본적으로 이것을 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... 
} 

인가?

+0

리턴 된'NetworkInterface'는 실제로'SystemNetworkInterface'이므로'ManagedNetworkInterface' 유형으로 변환하려고하면'InvalidCastException' 런타임이 발생합니다. – tomfanning

+0

@tomfanning, 네, 이미 발견했기 때문에 SystemNetworkInterface가 NetworkInterface로 다시 캐스트 된 다음 ManagedNetworkInterface로 이중 캐스트를 수행하는 것이 좋은지 묻습니다. 그것은 나에게보기 흉하게 보인다! – series0ne

+2

@activwerx : 네 구성이 좋습니다 : http://en.wikipedia.org/wiki/Composition_over_inheritance – Surfbutler

답변

0

ni.MyMethod()로 사용할 수 있습니다. 나는 추상 클래스를 상속하고 구현하는 구성을 사용했다 NetworkInterface

새로운 클래스는 지금 ManagedNetworkInterface는 IP 주소, 실제 주소, ID, 이름 등 같은 것들을 사용의 인스턴스를 생성하기위한 몇 가지 메커니즘을 포함

public class ManagedNetworkInterface : NetworkInterface 
{ 
    private NetworkInterface ni; 

    public override string Description 
    { 
     get { return ni.Description; } 
    } 

    //ect... 
} 

코드

1

나는 NetworkInterface를

public static class MyExtensions 
{ 
    public static void MyMethod(this NetworkInterface ni) 
    { 
      //Some Code 
    } 
} 

에 대한 확장 메서드를 작성하고 문제가 해결

+0

슬프게도, 코드는 .NET 2.0에 이식 가능해야합니다 (적어도 지금은). 그래서 확장 메소드가 OOTQ라고 믿습니다. 그러나 노력 +1! 감사! – series0ne