1. C# 인터페이스의 역할
사용 요약: 메소드를 포함하지만 메소드의 특정 구현을 위한 코드가 없는 인터페이스를 정의합니다. 그런 다음 인터페이스를 상속하는 클래스에서 인터페이스의 모든 메서드에 대한 코드를 구현해야 합니다. 그러나 인터페이스의 역할을 실제로 이해하지 못하면 인터페이스를 사용하는 것이 불필요하다고 생각하게 됩니다. 물론 그렇게 생각하는 것은 완전히 잘못된 것입니다. 인터페이스의 역할에 대해 간단하고 심도 있게 매우 이해하기 쉬운 분석을 인터넷에서 해주신 분이 계십니다.
[csharp] 일반 복사본 보기
<p></p><pre code_snippet_id="219991" snippet_file_name="blog_20140306_1_6634576" name="code" class="csharp">//我们定义一个接口 public interface IBark { void Bark(); }
//다른 클래스 정의, IBark에서 상속, Bark() 메서드 구현
public class Dog:IBark { public Dog() {} public void Bark() //实现其中的Bark()方法 { Consol.write("汪汪"); } }
//그런 다음 선언 Dog 인스턴스를 만들고 Bark() 메소드를 호출합니다
Dog Wangcai=new Dog();
Wangcai.Bark();
질문: Bark() 메서드를 호출하려면 Dog()에서 해당 메서드를 선언하면 되는 것 아닌가요? 인터페이스에 Bark()의 구체적인 구현이 없기 때문에 왜 인터페이스를 사용합니까? 그래도 Dog()에서는 인터페이스를 사용하는 것이 불필요한 것이 아닌가?
어떤 사람들은 인터페이스의 정의에서 인터페이스는 실제로 클래스 간의 합의, 일종의 제약 조건이라고 말합니다. 위의 예에서도 IBark 인터페이스를 상속하는 모든 클래스는 Bark() 메서드를 구현해야 합니다. 따라서 사용자(클래스를 사용하는 사용자)의 관점에서 특정 클래스가 IBark 인터페이스를 상속한다는 것을 알고 있다면 , 그러면 Bark() 메서드가 어떻게 구현되는지 걱정하지 않고 자신 있게 Bark() 메서드를 호출할 수 있습니다. 예를 들어 사용자가 Cat 클래스나 Dog 클래스를 사용하는 경우 IBark에서 상속받는다는 것을 알 수 있습니다. , 이 두 클래스에는 Bark() 메서드의 특정 구현이 있어야 하므로 클래스의 특정 구현에 대해 걱정하지 않고 Bark() 메서드를 직접 호출할 수 있습니다.
디자인 관점에서 보면 하나의 프로젝트에 여러 클래스를 작성해야 합니다. 이러한 클래스는 상대적으로 복잡하고 작업량도 상대적으로 크기 때문에 각 클래스에는 작성을 담당하는 직원이 필요합니다. 예를 들어 프로그래머 A는 Dog 클래스의 경우 프로그래머 B를 결정합니다. Cat 클래스를 작성합니다. 이 두 클래스는 원래 서로 관련이 없지만 사용자가 "호출"에 대한 메서드를 구현하려면 둘 다 필요하므로 둘 다 IBark의 목적에서 상속하도록 해야 합니다. 인터페이스는 통합 관리를 용이하게 하는 것입니다. 물론 인터페이스를 사용하지 않고도 목적을 달성할 수 있습니다. 그러나 이 경우 이러한 클래스에 Duck 클래스가 있는 경우에는 그렇게 명확하지 않습니다. ., 비교 때로는 누군가가 이 방법을 놓칠 수밖에 없기 때문에 인터페이스를 통해 더 안정적이고 더 바인딩됩니다.
C#의 인터페이스에 대한 간단한 설명
우리 회사에 두 가지 유형의 프로그래머가 있다고 가정합니다. VB에서 프로그램을 작성하는 프로그래머를 가리키는 VB 프로그래머(clsVBProgramer 클래스로 표시됨); Delphi는 clsVBProgramer 클래스로 표현되는 clsDelphiProgramer 클래스로 표현됩니다. 모든 클래스에는 WriteCode() 메서드가 있습니다. 정의는 다음과 같습니다.
[csharp] view plain copy
class clsVBProgramer() { .... WriteCode() { //用VB语言写代码; } .... } class clsDelphiProgramer() { .... WriteCode() { //用Delphi语言写代码; } .... }
/*이제 회사에는 프로젝트가 있고 프로그래머가 프로그램을 작성해야 합니다*/
class clsProject() { .... WritePrograme(clsVBProgramer programer)//用VB写代码 { programer.WriteCode(); } WritePrograme(clsDelphiProgramer programer)//重载方法,用Delphi写代码 { programer.WriteCode(); } ...... }
메인 프로그램에서는 다음과 같이 작성할 수 있습니다.
main() { clsProject proj=new clsProject; //如果需要用VB写代码 clsVBProgramer programer1=new clsVBProgramer; proj.WritePrograme(programer1); //如果需要用Delphi写代码 clsDelphiProgramer programer2=new clsDelphiProgramer; proj.WritePrograme(programer2); }
그런데 이때 다른 C# 프로그래머가 회사에 온다면 이 프로그램을 C#에서 프로그램 작성 기능을 실현할 수 있도록 어떻게 변경할 수 있습니까? ? 새로운 클래스 clsCSharpProgramer를 추가하고 동시에 이 clsProject 클래스에 WritePrograme(clsCSharpProgramer 프로그래머) 메서드를 다시 오버로드해야 합니다. 이번에는 더 문제다. C 프로그래머, C++ 프로그래머, Java 프로그래머가 있다면 어떨까요? 큰 문제!
그러나 대신 인터페이스를 사용하면 완전히 달라집니다.
먼저 프로그래머 인터페이스를 선언합니다:
interface IProgramer() { WriteCode(); }
그런 다음 두 클래스를 선언하고 IProgramer 인터페이스를 구현합니다.
class clsVBProgramer():IProgramer{....WriteCode(){ //用VB语言写代码;}....} class clsDelphiProgramer():IProgramer{....WriteCode(){ //用Delphi语言写代码;} ....}
clsProject 클래스 수정:
class clsProject(){....WritePrograme(IProgramer programer){ programer.WriteCode();//写代码}......} main(){ clsProject proj=new clsProject; IProgramer programer; //如果需要用VB写代码 programer=new clsVBProgramer; proj.WritePrograme(programer); //如果需要用Delphi写代码 programer=new clsDelphiProgramer; proj.WritePrograme(programer); }
C#, C, C++, JAVA 등 프로그래머가 더 추가되면 해당 클래스만 추가하면 됩니다. , 그리고 main()을 약간 수정하면 괜찮을 것입니다. 확장성이 특히 좋습니다!
또한 clsProject 클래스를 컴포넌트에 봉인하면 사용자가 기능을 확장해야 할 때 이를 달성하기 위해 외부적인 작은 수정만 하면 된다고 할 수 있습니다. 기본적으로 이미 밀봉한 구성 요소를 변경할 필요가 없습니다! 정말 편리하고 강력하지 않나요!
위 내용은 C# 인터페이스의 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!