[C\#]C\#추상 류 와 그 방법
C\#에서 키워드 abstract 를 사용 하여 추상 류 와 추상 적 인 방법 을 정의 합 니 다.
초기 화 할 수 없 는 종 류 는 추상 류 라 고 하 는데 일부 실현 만 제공 하지만 다른 종 류 는 이 를 계승 하고 인 스 턴 스 를 만 들 수 있 습 니 다.
"하나 이상 의 순 허 함 수 를 포함 하 는 클래스 를 추상 류 라 고 합 니 다.추상 류 는 예화 되 어 서 는 안 됩 니 다.더 나 아가 추상 류 는 인터페이스 와 다른 종류의 기본 클래스 로 만 사용 할 수 있 습 니 다."-C+Programming Language by Stroustrup Chapter 13.2
추상 류 는 클래스,방법,속성,색인 기와 이벤트 에 사 용 될 수 있 습 니 다.abstract 를 사용 하여 하나의 성명 에서 이러한 경향 이 다른 유형의 기본 구성원 으로 abstract 로 표시 되 거나 추상 류 에 포함 되 려 면 반드시 파생 류 에 의 해 이 루어 져 야 합 니 다.
abstract class ShapesClass { abstract public int Area(); } class Square : ShapesClass { int x, y; // Not providing an Area method results // in a compile-time error. public override int Area() { return x * y; } }
예 를 들 어 비 추상 적 인 방법 을 포함 하 는 추상 적 인 유형:
abstract class MyAbs { public void NonAbMethod() { Console.WriteLine("Non-Abstract Method"); } } class MyClass : MyAbs { } class MyClient { public static void Main() { //MyAbs mb = new MyAbs();//not possible to create an instance MyClass mc = new MyClass(); mc.NonAbMethod(); // Displays 'Non-Abstract Method' } }
하나의 추상 류 는 추상 과 비 추상 적 인 방법 을 포함 할 수 있다.하나의 유형 이 추상 류 에 계승 되면 이 파생 류 는 반드시 모든 기본 적 인 추상 적 인 방법 을 실현 해 야 한다.
하나의 추상 적 인 방법 은 방법 체 가 없 는 방법 이다.
abstract class MyAbs { public void NonAbMethod() { Console.WriteLine("Non-Abstract Method"); } public abstract void AbMethod(); // An abstract method } class MyClass : MyAbs//must implement base class abstract methods { public override void AbMethod() { Console.WriteLine("Abstarct method"); } } class MyClient { public static void Main() { MyClass mc = new MyClass(); mc.NonAbMethod(); mc.AbMethod(); } }
그러나 성명 을 통 해 파생 류 도 추상 적 이 고 우 리 는 모든 또는 특정한 가상 방법의 실현 을 피 할 수 있다.이것 이 바로 추상 류 의 일부 실현 이다.
abstract class MyAbs { public abstract void AbMethod1(); public abstract void AbMethod2(); } //not necessary to implement all abstract methods //partial implementation is possible abstract class MyClass1 : MyAbs { public override void AbMethod1() { Console.WriteLine("Abstarct method #1"); } } class MyClass : MyClass1 { public override void AbMethod2() { Console.WriteLine("Abstarct method #2"); } } class MyClient { public static void Main() { MyClass mc = new MyClass(); mc.AbMethod1(); mc.AbMethod2(); } }
C\#에서 하나의 추상 류 는 다른 비 추상 류 를 계승 할 수 있다.또한 기본 적 인 방법 을 계승 하여 새로운 추상 과 비 추상 적 인 방법 을 추가 하 는 것 이 가능 하 다.
class MyClass1 // Non-Abstract class { public void Method1() { Console.WriteLine("Method of a non-abstract class"); } } abstract class MyAbs : MyClass1 // Inherits from an non-abstract class { public abstract void AbMethod1(); } class MyClass : MyAbs//must implement base class abstract methods { public override void AbMethod1() { Console.WriteLine("Abstarct method #1 of MyClass"); } } class MyClient { public static void Main() { MyClass mc = new MyClass(); mc.Method1(); mc.AbMethod1(); } }
하나의 추상 적 인 유형 도 하나의 인터페이스 에서 이 루어 질 수 있다.이런 상황 에서 우 리 는 모든 방법 에 방법 체 를 제공 해 야 한다.이런 방법 은 인터페이스 에서 온 것 이다.
interface IInterface { void Method1(); } abstract class MyAbs : IInterface { public void Method1() { Console.WriteLine("Method implemented from the IInterface"); } } class MyClass : MyAbs//must implement base class abstract method { } class MyClient { public static void Main() { MyClass mc = new MyClass(); mc.Method1(); } }
우 리 는 키워드 abstract 를 sealed 와 함께 C\#에 사용 할 수 없습니다.왜냐하면 하나의 밀봉 류 가 추상 화 될 수 없 기 때 문 입 니 다.
abstract class MyAbs { public abstract void AbMethod1(); public abstract void AbMethod2(); } class MyClass1 : MyAbs { public override void AbMethod1() { Console.WriteLine("Abstarct method #1 of MyClass1"); } public override void AbMethod2() { Console.WriteLine("Abstarct method #2 of MyClass1"); } } class MyClient { public static void Main() { MyAbs ma1 = new MyClass1();// Polymorphism ma1.AbMethod1(); ma1.AbMethod2(); } }
추상 적 인 방법 은 다음 과 같은 특징 이 있다.
1.추상 적 인 방법 은 허 함수 로 볼 수 있다.
2.추상 적 인 방법의 성명 은 추상 류 에서 만 가능 하 다.
3.추상 적 인 방법 성명 은 실현 되 지 않 은 방식 만 제공 하고 방법론 이 없 기 때문이다.
4.방법 체 의 실현 피복 법 제공,피복 법 은 비 추상 적 인 구성원 이다.
5.추상 적 인 속성의 행 위 는 추상 적 인 방법 과 비슷 하 다.서로 다른 성명 형식 을 제외 하고.
6.정적 속성 에서 abstract 를 사용 하 는 것 은 오류 입 니 다.
*하나의 추상 적 인 속성 은 파생 류 를 통 해 override 를 사용 하여 실현 할 수 있다.
추상 클래스:
하나의 추상 류 는 모든 인터페이스 구성원 에 게 인 터 페 이 스 를 실현 하 는 추상 류 를 제공 해 야 한다.인터페이스 방법 을 추상 적 인 방법 에 배치 할 수 있다.예컨대
interface I { void M();}abstract class C: I { public abstract void M();}
추상 류 는 다음 과 같은 특징 을 가진다.
1.추상 류 는 예화 되 어 서 는 안 된다.
2.추상 류 는 추상 적 인 방법 과 접근 기 를 포함 할 수 있다.
3.추상 류 를 밀봉(sealed)으로 수식 해 서 는 안 된다.그러면 류 가 계승 되 지 못 한 다 는 것 을 의미 하고 추상 류 가 계승 되 는 원칙 에 위배 된다.
4.하나의 파 가 추상 적 인 유형 에서 태 어 난 비 추상 적 인 유형 은 모든 계승 된 추상 적 인 방법 과 방문 기의 실현 을 포함해 야 한다.
5.방법 과 속성 에서 abstract 키 워드 를 사용 하 는 것 은 이들 의 실현 을 포함한다.
설명
// : , , 。
// override、virtual abstract,
/ : , , "abstract"
//
// , , , 。
// , override , 。 , , , abstract
//
// : ( , -- ) ( "virtual" "override" ) , "new" , 。
// "override" (override) "virtual"、"abstract" "override" , override , "virtual"、"abstract" "override" 。
// (override): override , abstract,virtual, override ;
// : new , , , virtual" "override" ;
// (overload):
//
、 3
1、 abstract 。
2、 。
3、 。
4、 。
5、 “:”( ), override 。
6、 , 。
7、 , 。
using System;
namespace Abstract_for
{
/// <summary>
/// Abc
/// </summary>
abstract class Abc
{
public abstract void Afunc();// ,
public void Bfunc()
{
Console.WriteLine(" !");
}
}
/// <summary>
/// Abc Derv
/// </summary>
class Derv:Abc
{// , abstract
public override void Afunc()
{// override ! override
Console.WriteLine(" ");
}
}
public class Test{
public static void Main(string[] args)
{
Derv d = new Derv();
d.Afunc();
d.Bfunc();
}
}
}
-----------------------------------------
abstract
,
//
abstract class
{
public void
{}
}
//
class :
{
public void
{
//
}
//
class :
{
public void
{
//
}
}
ok !
paint1 = new () ;
paint1. ();//
paint2 = new () ;
paint2. ();//
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
추상 류 의 간단 한 응용블 로그 의 글 목록 과 하나의 글 읽 기 를 통일 시 키 고 싶 습 니 다. sql 조회 문 구 를 제외 하고 HTML 코드 가 다 르 고 다른 것 도 마찬가지 라 고 생각 합 니 다.그 나 저 나 이 두 가 지 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.