[C#] C #에서 클래스는 다른 클래스와 인터페이스에서 상속 할 수 있습니까?

클래스와 인터페이스에서 클래스를 상속받을 수 있는지 알고 싶습니다. 아래 예제 코드는 작동하지 않지만 원하는 작업을 전달한다고 생각합니다. 내가하고 싶은 이유는 회사에서 USB, 직렬, 이더넷 등의 장치를 만들기 때문입니다. 모든 응용 프로그램에서 공통 사항 (연결, 연결 해제, 펌웨어 가져 오기 등)을 동일하게 유지하는 데 도움이되는 모든 장치에 대한 프로그램을 작성하는 데 사용할 수있는 일반 구성 요소 / 인터페이스를 개발하려고합니다.

이 질문에 추가하려면 GenericDevice가 다른 프로젝트에있는 경우 해당 프로젝트에 IOurDevices 인터페이스를 넣은 다음 첫 번째 프로젝트에 대한 참조를 추가하면 USBDevice 클래스가 인터페이스를 구현하도록 할 수 있습니까? 하나의 프로젝트를 참조하고 장치가 무엇인지에 따라 다른 인터페이스를 구현하고 싶습니다.

class GenericDevice
{
   private string _connectionState;
   public connectionState
   {
      get{return _connectionState; }
      set{ _connectionState = value;}
   }
}

interface IOurDevices
{
   void connectToDevice();
   void DisconnectDevice();
   void GetFirmwareVersion();
}

class USBDevice : IOurDevices : GenericDevice
{
   //here I would define the methods in the interface
   //like this...
   void connectToDevice()
   {
       connectionState = "connected";
   }
}

//so that in my main program I can do this...

class myProgram
{
   main()
   {
      USBDevice myUSB = new USBDevice();
      myUSB.ConnectToDevice;
   }
}



답변

예. 시험:

class USBDevice : GenericDevice, IOurDevice

노트 : 기본 클래스는 인터페이스 이름 목록 앞에 와야합니다.

물론, 인터페이스가 정의한 모든 멤버를 구현해야합니다. 그러나 기본 클래스에 인터페이스 멤버와 일치하는 멤버가 포함 된 경우 기본 클래스 멤버는 인터페이스 멤버의 구현으로 작동 할 수 있으며 수동으로 다시 구현하지 않아도됩니다.


답변

아뇨 그러나 클래스에서 상속 하고 하나 이상의 인터페이스를 구현할 수 있습니다.

이와 같은 개념을 논의 할 때는 명확한 용어가 중요합니다. 여기서 볼 수있는 것 중 하나는 여기와 인쇄본에서 Jon Skeet의 글을 표시하는 것입니다.


답변

질문과 관련이 없으며 (Mehrdad의 답변으로 이동해야 함) 나는 이것이 nitpicky로 간주되지 않기를 바랍니다 : 클래스는 인터페이스를 상속 하지 않습니다. 구현 합니다.

.NET은 다중 상속을 지원하지 않으므로 용어를 올바르게 유지하면 통신에 도움이 될 수 있습니다. 클래스는 하나의 수퍼 클래스에서 상속 할 수 있으며 원하는 수의 인터페이스를 구현할 수 있습니다.


Eric의 의견에 대한 응답으로 인터페이스 “상속”, “구현”, “필수”또는 “반입”여부에 대한 다른 개발자와의 토론이있었습니다.

public interface ITwo : IOne

기술적 인 대답은 몇 가지 이유로 ITwo상속 IOne됩니다.

  • 인터페이스는 결코 그래서 주장, 구현이 없습니다 ITwo 구현을 IOne 이 잘못되었다고
  • ITwo상속 IOne하는 경우 방법은 MethodOne()에있는 IOne다음도에서 accesible입니다 ITwo. 즉 : ((ITwo)someObject).MethodOne())ITwo대한 정의를 명시 적으로 포함하지 않더라도 유효 합니다.MethodOne()
  • … 런타임이 그렇게 말했기 때문에! typeof(IOne).IsAssignableFrom(typeof(ITwo))보고true

우리는 마침내 인터페이스가 진정한 / 전체 상속을 지원한다는 데 동의했습니다. 누락 된 상속 기능 (예 : 재정의, 추상 / 가상 접근 자 등)이 인터페이스 상속이 아닌 인터페이스에서 누락되었습니다. 여전히 개념을 단순하거나 명확하게 만들지는 않지만 Eric의 세계에서 실제로 일어나는 일을 이해하는 데 도움이됩니다. 🙂


답변

내 질문의 두 번째 부분에 대한 답을 찾았습니다. 예, 클래스가 인터페이스가 public으로 선언되어있는 한 다른 클래스에있는 인터페이스를 구현할 수 있습니다.


답변