Sdílet prostřednictvím


abstract (Referenční dokumentace jazyka C#)

abstract Modifikátor znamená, že je věcí upravuje má chybějících nebo neúplných provádění.Lze použít modifikátor abstraktní třídy, metody, vlastnosti, indexování a události.Použití abstract modifikátor deklarace třídy označíte, že třída má pouze základní třídy z jiné třídy.Členy označeny jako abstraktní nebo součástí abstraktní třída musí implementovány třídami, které vyplývají z abstraktní třídy.

Příklad

V tomto příkladu třídy Square musí poskytnout implementace Area protože je odvozeno z ShapesClass:

abstract class ShapesClass
{
    abstract public int Area();
}
class Square : ShapesClass
{
    int side = 0;

    public Square(int n)
    {
        side = n;
    }
    // Area method is required to avoid 
    // a compile-time error. 
    public override int Area()
    {
        return side * side;
    }

    static void Main() 
    {
        Square sq = new Square(12);
        Console.WriteLine("Area of the square = {0}", sq.Area());
    }

    interface I
    {
        void M();
    }
    abstract class C : I
    {
        public abstract void M();
    }

}
// Output: Area of the square = 144

Abstraktní třídy mají následující funkce:

  • Nelze vytvořit instanci abstraktní třídy.

  • Abstraktní třída může obsahovat abstraktní metody a přístupové objekty.

  • Není možné změnit abstraktní třída s sealed (Referenční dokumentace jazyka C#) modifikátor protože dvě modifers mají opačné význam.sealed Modifikátor zabrání dědí třídu a abstract modifikátor vyžaduje třída zdědit.

  • Než abstraktní třídy odvozené od abstraktní třída musí zahrnovat Skutečná implementace zděděné abstraktní metody a přístupové objekty.

Použití abstract modifikátor v deklaraci metody nebo vlastnosti označuje metodu nebo vlastnost neobsahuje implementaci.

Abstraktní metody mají následující funkce:

  • Abstraktní metoda je implicitně virtuální metody.

  • Abstraktní metoda prohlášení jsou povoleny pouze v abstraktních tříd.

  • Protože deklarace abstraktní metoda poskytuje žádná skutečná implementace, je tělo žádné metody; deklarace metody jednoduše končí středníkem a neexistují žádné složené závorky ({}) po podpisu.Příklad:

    public abstract void MyMethod();
    

    Provádění poskytuje metodu pro přepsáníoverride (Referenční dokumentace jazyka C#), který je členem jiné abstraktní třídy.

  • Je při použití statické nebo virtuální modifikátory v deklaraci abstraktní metody.

Abstraktní vlastnosti chovat jako abstraktní metody s výjimkou rozdíly v syntaxi prohlášení a vyvolání.

  • Je při použití abstract modifikátor v statickou vlastnost.

  • Abstraktní zděděná vlastnost lze přepsat v odvozené třídě včetně deklarace vlastnosti, které používá potlačit modifikátor.

Další informace o abstraktní třídy, viz Abstraktní a uzavřené třídy a jejich členové (Průvodce programováním v C#).

Abstraktní třída musí obsahovat implementaci pro všechny členy rozhraní.

Abstraktní třída, která implementuje rozhraní mohou mapovat metody rozhraní na abstraktní metody.Příklad:

interface I
{
    void M();
}
abstract class C : I
{
    public abstract void M();
}

V tomto příkladu třídy DerivedClass je odvozen z abstraktní třída BaseClass.Abstraktní třída obsahuje abstraktní metody, AbstractMethoda dvě abstraktní vlastnosti X a Y.

abstract class BaseClass   // Abstract class
    {
        protected int _x = 100;
        protected int _y = 150;
        public abstract void AbstractMethod();   // Abstract method 
        public abstract int X    { get; }
        public abstract int Y    { get; }
    }

    class DerivedClass : BaseClass
    {
        public override void AbstractMethod()
        {
            _x++;
            _y++;
        }

        public override int X   // overriding property
        {
            get
            {
                return _x + 10;
            }
        }

        public override int Y   // overriding property
        {
            get
            {
                return _y + 10;
            }
        }

        static void Main()
        {
            DerivedClass o = new DerivedClass();
            o.AbstractMethod();
            Console.WriteLine("x = {0}, y = {1}", o.X, o.Y);
        }
    }
    // Output: x = 111, y = 161

V předchozím příkladu, pokud se pokusíte vytvořit instanci abstraktní třídy pomocí příkazu, například takto:

BaseClass bc = new BaseClass();   // Error

zobrazí chyba oznamující, že kompilátor nelze vytvořit instanci abstraktní třídy 'BaseClass'.

Specifikace jazyka C#

Další informace najdete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.

Viz také

Referenční dokumentace

Modifikátory (Referenční dokumentace jazyka C#)

virtual (Referenční dokumentace jazyka C#)

override (Referenční dokumentace jazyka C#)

Klíčová slova jazyka C#

Koncepty

Průvodce programováním v C#

Další zdroje

Referenční dokumentace jazyka C#