C \ # 에서 추상 류 와 인터페이스의 차이 점
무엇이 인터페이스 입 니까?
프로그램 을 정의 하 는 협정인터페이스의 클래스 나 구 조 를 실현 하려 면 인터페이스의 정의 와 엄격하게 일치 해 야 한다.이 협정 이 있 으 면 프로 그래 밍 언어의 제한 을 버 릴 수 있다.C \ # 인 터 페 이 스 는 여러 개의 기본 인터페이스 에서 계승 할 수 있 고 클래스 나 구 조 는 여러 개의 인 터 페 이 스 를 실현 할 수 있다.C \ # 인 터 페 이 스 는 방법, 속성, 이벤트, 색인 기 를 포함 할 수 있 습 니 다.인터페이스 자체 가 정 의 된 구성원 의 실현 을 제공 하지 않 습 니 다.인 터 페 이 스 는 이 인 터 페 이 스 를 실현 하 는 클래스 나 인터페이스 가 제공 해 야 할 구성원 만 지정 합 니 다.
어떻게 인 터 페 이 스 를 사용 합 니까?
예 를 들 면:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace
{
class Program
{
static void Main(string[] args)
{
User user = new User();
Department dept = new Department();
//Ifactory factory =new SqlserverFactory();
IFactory factory = new AccessFactory();
//
IUser iu = factory.CreateUser();
iu.Insert(user);
iu.GetUser(1);
IDepartment id = factory.CreateDepartment();
id.Insert(dept);
id.GetDepartment(1);
Console.Read();
}
}
class User
{
private int id;
public int ID
{
get { return id; }
set { id = value; }
}
}
class Department
{
private int id;
public int ID
{
get { return id; }
set { id = value; }
}
}
//IDepartment , , 。
interface IDepartment
{
void Insert(Department department);
Department GetDepartment(int id);
}
//SqlserverDepartment , SQL Server Department
class SqlserverDepartment : IDepartment
{
public void Insert(Department department)
{
Console.WriteLine(" SQL Server Department ");
}
public Department GetDepartment(int id)
{
Console.WriteLine(" SQL Server ID Department ");
return null;
}
}
//Access , Access Department
class AccessDepartment : IDepartment
{
public void Insert(Department department)
{
Console.WriteLine(" Access Department ");
}
public Department GetDepartment(int id)
{
Console.WriteLine(" Access ID Department ");
return null;
}
}
//IUser , ,
interface IUser
{
void Insert(User user);
User GetUser(int id);
}
//SqlserverUser , SQL Server User
class SqlserverUser : IUser
{
public void Insert(User user)
{
Console.WriteLine(" SQL Server User ");
}
public User GetUser(int id)
{
Console.WriteLine(" SQL Server ID User ");
return null;
}
}
//Access , Access User
class AccessUser : IUser
{
public void Insert(User user)
{
Console.WriteLine(" Access User ");
}
public User GetUser(int id)
{
Console.WriteLine(" Access User ");
return null;
}
}
//IFactory , Department
interface IFactory
{
IUser CreateUser();
//
IDepartment CreateDepartment();
}
//SqlServerFactory , IFactory , SqlserverUser SqlserverDepartment
class SqlserverFactory : IFactory
{
public IUser CreateUser()
{
return new SqlserverUser();
}
public IDepartment CreateDepartment()
{
return new SqlserverDepartment();
}
}
//AccessFactory , IFactory , AccessUser AccessDepartment
class AccessFactory : IFactory
{
public IUser CreateUser()
{
return new AccessUser();
}
public IDepartment CreateDepartment()
{
return new AccessDepartment();
}
}
}
무엇이 추상 류 입 니까?
추상 류 는 추상 적 인 방법 을 포함 하 는 류 이다.그렇다면 무엇이 또 추상 적 인 방법 일 까?추상 적 인 방법 은 방법 내용 이 없고 방법 이름과 매개 변수 목록 만 있 는 방법 이다.아울러결말그의 남 다른 점 을 표시 하기 위해, 그의 복귀 유형 에 abstract 를 추가 합 니 다.클 라 스 앞 에 abstract 를 추가 합 니 다.
쉽게 말 하면 abstract 로 수식 하 는 방법 과 유형 은 추상 적 인 방법 과 유형 이다.
어떻게 추상 류, 추상 적 인 방법 을 사용 하고 추상 적 인 방법 을 어떻게 실현 합 니까?
예 를 들 면:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace
{
class Program
{
static void Main(string[] args)
{
// Context ConcreteStateA
Context c = new Context(new ConcreteStateA());
// ,
c.Request();
c.Request();
c.Request();
c.Request();
Console.Read();
}
}
//Context , COncreteState ,
class Context
{
private State state;
// Context
public Context(State state)
{
this.state = state;
}
// ,
public State State
{
get { return state; }
set
{
state = value;
Console.WriteLine(" :" + state.GetType().Name);
}
}
// ,
public void Request()
{
state.Handle(this);
}
}
// State, Context
abstract class State
{
public abstract void Handle(Context context);
}
//ConcreteState , , Context
class ConcreteStateA : State
{
public override void Handle(Context context)
{
// ConcreteStateA ConcreteStateB
context.State = new ConcreteStateB();
}
}
class ConcreteStateB : State
{
public override void Handle(Context context)
{
// ConcreteStateB ConcreteStateA
context.State = new ConcreteStateA();
}
}
}
인터페이스 와 추상 류 를 혼동 해도 사실은 모두 나 를 탓 할 수 없다. 왜냐하면 그들 은 확실히 비슷 한 점 이 있 기 때문이다.
인터페이스 와 추상 류 의 공통점:
1. 실례 화 할 수 없다.
2. 실현 되 지 않 은 방법 성명 포함;
3. 파생 류 는 반드시 실현 되 지 않 은 방법 을 실현 해 야 한다. 추상 류 는 추상 적 인 방법 이 고 인 터 페 이 스 는 모든 구성원 (방법 뿐만 아니 라 다른 구성원 도 포함한다) 이다.
그래도 큰 차이 가 있어 요.
인터페이스 와 추상 류 의 차이:
1. 유형 은 대상 에 대한 추상 적 인 것 으로 추상 류 를 대상 으로 하고 추상 적 인 유형 을 추상 류 라 고 할 수 있다. 인 터 페 이 스 는 행위 의 규범 이나 규정 일 뿐이다.
2. 인 터 페 이 스 는 대체적으로 계승 하 는 구체 적 인 특징 을 가지 지 않 고 호출 할 수 있 는 방법 만 약속 했다.
3. 하나의 클래스 는 한 번 에 여러 개의 인 터 페 이 스 를 실현 할 수 있 지만 하나의 부모 클래스 만 확장 할 수 있 습 니 다.
4. 인 터 페 이 스 는 리 셋 을 지원 할 수 있 지만 계승 은 이런 특징 을 가지 지 않 는 다.
5. 추상 류 는 밀봉 되 어 서 는 안 된다.
6. 추상 류 가 실현 하 는 구체 적 인 방법 은 기본적으로 허 이지 만 인 터 페 이 스 를 실현 하 는 클래스 의 인터페이스 방법 은 기본적으로 비 허 적 입 니 다. 물론 허 적 이 라 고 설명 할 수 있 습 니 다.
7. (인터페이스) 비 추상 류 와 유사 하고 추상 류 도 이러한 기본 목록 에 표 시 된 인터페이스의 모든 구성원 에 게 자신의 실현 을 제공 해 야 한다.그러나 추상 류 가 인터페이스 방법 을 추상 적 인 방법 에 반영 하도록 허용 한다.
8. 추상 류 는 oop 중의 한 원칙 을 실현 하고 가 변 적 인 것 과 가 변 적 인 것 을 분리 한다.추상 류 와 인 터 페 이 스 는 가 변 적 이지 않 은 것 으로 정의 하고 가 변 적 인 좌석 자 류 를 실현 하 는 것 이다.
9. 좋 은 인터페이스 정 의 는 다기 능 이 아니 라 특정한 기능 성 을 가 져 야 한다. 그렇지 않 으 면 인터페이스 오염 을 초래 해 야 한다.만약 에 하나의 유형 이 이 인터페이스의 한 기능 만 실현 하고 인터페이스 중의 다른 방법 을 실현 해 야 한다 면 인터페이스 오염 이 라 고 한다.
10. 계승 을 통 해 구성 기능 을 실현 하 는 것 을 피하 고 블랙박스 재 활용, 즉 대상 조합 을 사용한다.상속 의 차원 이 증가 하기 때문에 가장 직접적인 결 과 는 바로 당신 이 이 부류 의 어떤 종 류 를 호출 할 때 반드시 그들 을 모두 창고 에 불 러 와 야 한 다 는 것 입 니 다!결 과 는 가히 짐작 할 수 있다.또한, 세심 한 친 구 는 마이크로소프트 가 하나의 유형 을 구축 할 때 대상 조합 방법 을 사용 하 는 경우 가 많다 는 것 을 알 수 있다.예 를 들 어 asp. net 에서 Page 류 는 ServerRequest 등 속성 이 있 지만 사실은 그들 은 모두 특정한 유형의 대상 이다.페이지 류 의 이 대상 을 사용 하여 다른 종류의 방법 과 속성 을 호출 하 는 것 은 매우 기본 적 인 디자인 원칙 입 니 다.
11. 추상 류 가 인 터 페 이 스 를 실현 하면 인터페이스 에서 방법 을 추상 류 에 투사 하여 추상 적 인 방법 으로 실현 하지 않 고 추상 류 의 하위 류 에서 인터페이스 에서 방법 을 실현 할 수 있다.
추상 류 와 인 터 페 이 스 를 언제 사용 합 니까?
1. 구성 요소 의 여러 버 전 을 만 들 예정 이 라면 추상 류 를 만 듭 니 다.추상 류 는 구성 요소 버 전 을 제어 하 는 간단 한 방법 을 제공한다.
2. 만 든 기능 이 넓 은 범위 의 모든 대상 에서 사용 된다 면 인 터 페 이 스 를 사용 합 니 다.작고 세련 된 기능 블록 을 설계 하려 면 인 터 페 이 스 를 사용한다.
3. 큰 기능 단원 을 설계 하려 면 추상 류 를 사용 합 니 다. 구성 요소 의 모든 실현 간 에 통용 되 는 실현 기능 을 제공 하려 면 추상 류 를 사용 합 니 다.
4. 추상 류 는 주로 밀접 한 관 계 를 가 진 대상 에 사용 된다.인 터 페 이 스 는 관련 이 없 는 클래스 에 유 니 버 설 기능 을 제공 하기에 적합 하 다.
아래 에 몇 가지 비유 가 매우 적절 하 게 말 되 어 있 는데, 여러분 도 그 중에서 많은 것 을 깨 달 을 수 있 을 것 입 니 다.
1. 비행 기 는 날 수 있 고 새 는 날 수 있 으 며 그들 은 모두 같은 인터페이스 인 '날 기' 를 계승 했다.그러나 F22 는 비행기 추상 류 에 속 하고 비 둘 기 는 새 추상 류 에 속한다.
2. 철문 나무 문 이 모두 문 (추상 류) 인 것 처럼 문 을 원 하면 내 가 줄 수 없 지만 구체 적 인 철문 이나 나무 문 (다 형) 을 줄 수 있다.그리고 문 만 있 을 수 있 습 니 다. 창문 이 라 고 할 수 없습니다.하나의 문 은 자물쇠 (인터페이스) 도 있 고 초인종 (다 중 실현) 도 있다.문 (추상 류) 은 당신 이 무엇 인지 정의 합 니 다. 인터페이스 (자물쇠) 는 당신 이 무엇 을 할 수 있 는 지 규정 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.