[C\#]C\#추상 류 와 그 방법

8124 단어 추상 류
해명
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. ();//

좋은 웹페이지 즐겨찾기