>  기사  >  백엔드 개발  >  C#의 추상 클래스 및 인터페이스에 대한 자세한 설명

C#의 추상 클래스 및 인터페이스에 대한 자세한 설명

黄舟
黄舟원래의
2017-09-25 11:15:322571검색

질문 발생:

C#에서 추상 클래스와 인터페이스를 사용할 때 다음과 같은 유사한 문제에 자주 직면하게 되는데, 대략적으로 요약하면 다음과 같습니다.

(1) 추상 클래스와 인터페이스 간의 본질적인 차이점과 연관성은 무엇입니까? ?

(2) 언제 추상 클래스를 사용하도록 선택해야 하며, 언제 인터페이스를 사용하는 것이 가장 적절한가요?

(3) 프로젝트의 유지 관리 및 확장성을 높이기 위해 프로젝트에서 이를 어떻게 사용합니까? 궁극적인 양날의 검 효과를 얻기 위해 Struct 및 클래스와 긴밀하게 결합하는 방법은 무엇입니까?

해결책:

이것은 추상 클래스와 인터페이스를 배울 때 직면한 문제이기도 합니다. 제가 요약한 세 가지 문제를 보면 이것이 우리 대부분의 프로그래머가 직면하는 문제일 수 있다는 것을 어렵지 않게 알 수 있습니다. . 문제의 세 단계,

첫 번째 단계(기본 개념): 질문 1과 마찬가지로 이 사람들은 먼저 기본 개념의 장애물을 제거해야 합니다. 먼저 추상 클래스가 무엇인지, 그리고 클래스가 무엇인지 이해해야 합니다. 인터페이스는?

그럼 추상 클래스와 인터페이스의 차이점과 연관성이 무엇인지 이해하시나요? 물론 이를 이해하고 실천하는 데 시간이 걸릴 수 있습니다. 결국 이러한 개념은 상대적으로 추상적이고 만져지거나 볼 수 없습니다. 물론 가장 중요한 것은 할 일이 없을 때 데모를 만드는 것입니다. 인스턴스를 만들어서 모두 사용하세요. 사용할 때 왜 이렇게 사용해야 하는지 좀 더 생각해 보세요. 이것의 이점은 무엇입니까? 인터페이스를 사용할 수 있습니까? 그렇지 않은 경우 추상 클래스를 사용하면 어떤 이점이 있습니까? 이것은 또한 나의 작은 경험이기도 합니다. 하하! 이상으로 질문 1을 정리하겠습니다. 첫째, 기억하기 편리하고, 둘째, 이해가 깊어집니다.

추상 클래스와 인터페이스의 개념: 사실 기본적으로 이런 개념은 교과서나 블로그에 많이 나와 있는데, 선배님들께서 잘 요약해 주셨는데, 대중성과 편의성 측면에서 조금 모호하고 이해하기 어려울 수도 있습니다. 이해해 주세요. 산시성 언어를 추가하겠습니다.

(1) 추상 클래스: 파생 클래스가 공유 기본 클래스에 액세스할 수 있도록 공용 메서드 세트를 제공합니다.

추상 클래스의 특징은 다음과 같습니다. (1) 추상 클래스에는 추상 메서드와 메서드 구현이 모두 포함됩니다. (3) 추상 클래스의 추상 메서드는 파생 클래스에서 구현되거나 파생 추상 클래스에 의해 상속되어야 합니다(추상 파생 클래스는 기본 클래스의 추상 메서드를 상속할 수 있음). 파생 클래스에서 기본 클래스의 추상 메소드를 구현하는 데 사용됩니다. (4) 추상 클래스는 단일 상속에 속합니다(이것은 모든 클래스의 동일한 특성에 속하므로 여기서 언급하겠습니다). For IS-A;

위에서 말한 내용이 명확하지 않은 경우 추상 클래스에 대한 공식 웹사이트 주소를 알려 드리겠습니다: https://docs.microsoft.com/en- us/dotnet/csharp/언어-reference/ 키워드/abstract

(2) 인터페이스: 가상 메서드 세트를 포함하는 추상 유형

인터페이스의 특징은 다음과 같습니다. (1) 인터페이스에는 다음의 정의만 포함됩니다. 가상 메서드, 선언 정의만 있고 함수 구현은 없습니다. (2) 인터페이스 클래스는 속성, 이벤트, 인덱서 등을 포함할 수 있지만 필드는 포함할 수 없습니다. (3) 인터페이스 클래스는 다중 상속에 속합니다.

추상 클래스와 인터페이스의 차이점 Contact과 동일한 점:

: (1) 직접 인스턴스화할 수 없으며 상속을 통해서만 실현할 수 있습니다.

(2) 추상화입니다.

차이점:

(1) 인터페이스는 다중 상속을 지원합니다.

(2) 인터페이스에는 메서드, 속성, 이벤트, 인덱서를 포함할 수 없습니다. 필드, 추상 클래스는 필드 및 메소드를 포함할 수 있습니다. 구현

(3) 인터페이스는 콜백을 지원할 수 있지만 추상 클래스는 콜백을 지원하지 않습니다.

(4) 인터페이스는 값 유형 및 참조 유형의 기본 클래스로 사용될 수 있습니다.

두 번째 단계(사용 단계): 질문 2와 마찬가지로 이 사람들은 기본 사항에 대해 어느 정도 이해하고 있지만 특정 실습이 부족할 수 있습니다. 그렇다면 추상 클래스는 언제 사용해야 할까요?

두 번째 질문을 분석한 결과 3가지 제안을 제시했습니다.

첫 번째 제안은 기본 개념은 단순히 개념을 암기하는 것이 아니라 더 많이 연습하고 더 생각하고, 더 많이 연습하고 더 생각하고, 반복해야 한다는 것입니다.

두 번째 제안은 이 지식을 자신의 프로젝트에 활용하는 것입니다.

세 번째 제안은 다음과 같습니다. 내가 사용한 추상 클래스 및 인터페이스 프로젝트의 지식 포인트를 요약하고 요약합니다.
언제 추상 클래스 및 인터페이스를 사용해야 하는지에 관해 전임자의 경험을 요약하고 참고용으로 다음 포인트를 제공합니다.

(1) 향후 설계한 구성 요소가 여러 버전을 가지게 될 경우 일반적으로 추상 클래스를 사용합니다. 예를 들어 처음에는 데이터베이스 DB를 설계할 때 SQL Server, mysql을 사용할 수 있습니다. 대규모 데이터베이스 시스템인 oracle을 사용할 수 있으며, 클래스를 설계할 때 데이터베이스 연결 이름, 버전, 데이터베이스 유형과 같은 몇 가지 공통 속성을 갖도록 추상 기본 클래스 DB를 설계합니다. , 데이터베이스의 공통 메소드: Open(), Close() 메소드 등

(2) 설계된 구성 요소가 공통 동작을 지원하는 경우 인터페이스는 예를 들어 새, 인간 및 자동차를 고려할 수 있습니다. 모두 사운드가 있으며, 이때 인터페이스를 설계할 수 있습니다. 호출된 함수 동작을 포함하고 이를 각 특정 클래스에 구현합니다.

(3) 인터페이스를 상속하는 파생 클래스나 인터페이스에서는 인터페이스에는 동작 메서드를 추가해야 하며 모든 상속은 반드시 필요합니다. 이를 구현하려면 이때 파생 클래스에 새 인터페이스를 구현하여 파생 클래스의 고유한 작업을 구현할 수 있습니다. 예를 들면 다음과 같습니다.

/// <summary>
/// 实现一个爬行动物的动作接口
/// </summary>
interface IAnimalClimb
{
void Climb();
}
/// <summary>
/// 实现一个会叫的动物的动作接口
/// </summary>
interface ICry
{
void Cry();
}
/// <summary>
/// 实现一个动物抽象类
/// </summary>
public abstract class Animal
{
//动物的名字
public string Name { get; set; }
//动物的颜色
public string Color { get; set; }
//动物抽象类的共有方法
public abstract void Sleep();
public abstract void Breathe();
}
/// <summary>
/// 定义鸟类,通用方法是会飞
/// </summary>
public class Bird : Animal,ICry
{
public override void Sleep()
{
Console.WriteLine("Bird派生类继承了基类的Sleep()方法");
}
public override void Breathe()
{
Console.WriteLine("Bird派生类继承了基类的Breathe()方法");
}
//鸟类可以继承统一的接口动作,例如:叫
public void Cry()
{
Console.WriteLine("Bird派生类继承了接口ICry的叫的方法");
}
}
/// <summary>
/// 定义爬行动物类
/// </summary>
public class Snake : Animal, IAnimalClimb
{
public override void Breathe()
{
Console.WriteLine("Snake派生类继承了基类的Sleep()方法");
}
public override void Sleep()
{
Console.WriteLine("Snake派生类继承了基类的Sleep()方法");
}
//爬行动物可以继承统一的接口动物,例如:爬
public void Climb()
{
Console.WriteLine("Snake派生类继承了接口IAnimalClimb的爬的方法");
}
}

위 코드는 단지 다음과 같습니다.
세 번째 단계(최적화 단계): 질문 3과 마찬가지로 추상 클래스나 인터페이스를 만들 때 가장 먼저 고려하는 것은 사용할 수 있다는 것입니다. 유지 관리 및 확장이 어려운 클래스 또는 인터페이스가 많이 정의되어 있습니까? 아니면 클래스 간에 교차점이 있습니까? 그렇다면 상속 관계를 최적화하는 방법은 무엇입니까? 프로그램을 유지 관리하고 확장 가능하게 만들려면 어떻게 해야 합니까?
저는 개인적으로 다음과 같은 측면을 갖추기를 권합니다.
(1) 탄탄한 기본 지식과 깊은 기본 능력이 있어야 합니다.
(2) 더 많이 질문하고 더 많이 생각하는 마음이 있어야 합니다. 추상 클래스와 인터페이스에 대한 지식 질문, 추상 클래스를 사용하지 않고 인터페이스를 사용하는 이유는 무엇입니까? 이런 곳에서 인터페이스를 사용하는 것이 왜 적절한가요?
(3) 선배들이 인터페이스와 수업을 디자인하는 방법에 대해 자세히 알아보세요. 온라인에서 많은 정보를 검색할 수 있습니다.
(4) 개인적으로는 경험과 생각을 디자인하는 선배들이기 때문에 디자인 패턴에 대해 자세히 알아보시기 바랍니다.

위 내용은 C#의 추상 클래스 및 인터페이스에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.