C\#추상 류 와 개폐 원칙 에 대해 간단히 말 하 다
(1)키워드 abstract 를 사용 하여 수식 하 는 종 류 를 추상 류 라 고 한다.
(2)추상 류 는 하나의 행위 만 사용 할 뿐 대상 을 만 드 는 것 을 통 해 단독으로 사용 할 수 없습니다.new 를 사용 하 는 것 은 잘못된 것 입 니 다.파생 류 를 통 해 함수 구성원 의 구체 적 인 논 리 를 실현 할 수 있 습 니 다.
(3)추상 류 에 추상 적 인 방법 이 있 을 수도 있 고 추상 적 인 방법 이 없 을 수도 있다.유형 에 추상 적 인 방법 이 존재 한다 면 이런 유형 은 바로 추상 류 이다.
(4)추상 류 는 정적(static)이나 밀봉(sealed)일 수 없다.
다음은 간단 한 추상 류 이다.
abstract class Vehicle
{
public abstract void test();
public void VehicleTest()
{
}
}
class Car : Vehicle
{
public override void test()
{
}
}
2.개폐 원칙bug 를 수정 하거나 새로운 기능 을 추가 하기 위해 서가 아니라면 클래스 의 코드 를 함부로 변경 하지 마 십시오.
다시 말 하면 우 리 는 확실 하고 변 하지 않 으 며 안정 적 이 고 고정 적 인 것 을 포장 해 야 한다.불확실 하고 바 뀔 수 있 는 구성원 을 추상 류 로 성명 하고 하위 류 에 남 겨 두 어 실현 하도록 한다.
3.우 리 는 간단하게 계승 을 실현 했다.
class Program
{
static void Main(string[] args)
{
Vehicle raceCar = new RaceCar();
Console.ReadKey();
}
}
/// <summary>
///
/// </summary>
class Vehicle
{
/// <summary>
///
/// </summary>
public void Stop()
{
Console.WriteLine("Stopped");
}
/// <summary>
///
/// </summary>
public void Fill()
{
Console.WriteLine("Fill");
}
}
class Car : Vehicle
{
public void Run()
{
Console.WriteLine("Car is running");
}
}
class RaceCar : Car
{
public void Run()
{
Console.WriteLine("RaceCar is running");
}
}
위의 코드 를 통 해 알 수 있 듯 이 이것 은 계승 체인 이다.그 중에서 Run 방법 은 서로 다른 종류의 차 에 따라 구별 되 기 때문에 우리 가 다 형 을 실현 하려 면 예 를 들 어 Vehicle raceCar = new RaceCar();이때 raceCar 대상 은 Run 방법 으로 바 꿀 수 없습니다.Vehicle 류 에 이런 방법 이 없 었 기 때문에 예전 에 이런 상황 에 대한 해결 방법 은 Vehicle 에 Run 방법 을 추가 하고 어떤 유형 이 있 는 지 판단 하 는 것 입 니 다.
public void Run(string type)
{
if (type == "Car")
{
Console.WriteLine("Car is running");
}
else if (type == "RaceCar")
{
Console.WriteLine("RaceCar is running");
}
else
{
}
}
위의 코드 와 같이 새로운 유형 을 추가 할 때 이 기본 클래스 의 방법 을 다시 고 쳐 야 합 니 다.개폐 원칙(bug 를 수정 하거나 새로운 기능 을 추가 하기 위해 서 는 클래스 의 코드 를 함부로 변경 하지 마 십시오)을 위반 하기 때문에 수정 이 필요 합 니 다.
public virtual void Run()
{
Console.WriteLine("RaceCar is running");
}
파생 류 는 이 방법 을 다시 쓰 면 새로운 유형 을 추가 할 때 다시 쓰 면 되 고 기본 코드 를 바 꾸 지 않 아 도 된다.그러나 만약 에 이런 유형 에서 이 Run 방법 을 사용 하지 않 을 것 이 라 고 생각한다 면 우 리 는 방법 체 를 없 애고 추상 적 인 방법 으로 바 꿀 수 있다.해당 하 는 유형 도 추상 적 인 유형 으로 바 뀌 고 Run 은 파생 류 에 의 해 다시 쓸 수 있다.
class Program
{
static void Main(string[] args)
{
Vehicle raceCar = new RaceCar();
Console.ReadKey();
}
}
/// <summary>
///
/// </summary>
abstract class Vehicle
{
/// <summary>
///
/// </summary>
public void Stop()
{
Console.WriteLine("Stopped");
}
/// <summary>
///
/// </summary>
public void Fill()
{
Console.WriteLine("Fill");
}
public abstractvoid Run()
{
Console.WriteLine("RaceCar is running");
}
}
class Car : Vehicle
{
public override void Run()
{
Console.WriteLine("Car is running");
}
}
class RaceCar : Car
{
public override void Run()
{
Console.WriteLine("RaceCar is running");
}
}
4.인터페이스 와 추상 류(1)구체 적 인 유형-추상 적 인 유형-인 터 페 이 스 는 점점 추상 적 이 고 내부 실현 의 유형 이 점점 적어 진다.
(2)추상 류 는 재 활용 으로 생 긴 다.기 류 를 바탕 으로 사용 하고 디 결합 기능 도 가진다.
(3)포장 이 확정 되 고 개방 이 불확실 하 며 하위 클래스 로 연기 된다.
(4)인 터 페 이 스 는 결합 을 해제 하기 위해 생 겨 나 고 내부 집적,저 결합,단원 테스트 에 편리 합 니 다.
(5)모두 예화 할 수 없고 변 수 를 설명 할 수 있 으 며 구체 적 인 사례 를 참조 할 수 있 습 니 다.
여기 서 C\#추상 류 와 개폐 원칙 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 C\#추상 류 와 개폐 원칙 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.