Aracılığıyla paylaş


virtual (C# Başvurusu)

virtual Anahtar sözcüğü değiştirme yöntemi, özelliği, dizin oluşturucu veya olay bildirimi ve türetilmiş bir sınıfta geçersiz kılınması için izin vermek için kullanılır.Örneğin, bu yöntem, devralan herhangi bir sınıfı tarafından geçersiz kılınabilir:

public virtual double Area() 
{
    return x * y;
}

Sanal üye uygulaması tarafından değiştirilebilir bir üye geçersiz kılma türetilmiş bir sınıf içinde.Nasıl kullanılacağı hakkında daha fazla bilgi için virtual , anahtar Bkz: Geçersiz Kılma ve Yeni Anahtar Sözcüklerle Sürüm Oluşturma (C# Programlama Kılavuzu) ve Geçersiz Kılmanın ve Yeni Anahtar Sözcüklerin Ne Zaman Kullanılacağını Bilme (C# Programlama Kılavuzu).

Notlar

Sanal bir yöntem çağrıldığında, çalışma zamanı tür nesnesinin geçersiz kılan bir üye için denetlenir.Türetilmiş bir sınıf üyesi kılınmış gerekiyorsa, özgün üye olabilir en türetilmiş sınıfta geçersiz kılma üye denir.

Varsayılan olarak, sanal olmayan yöntemlerdir.Sanal olmayan bir yöntemi geçersiz kılamaz.

Kullanamazsınız virtual değiştirici ile static, abstract, private, veya override değiştiriciler.Aşağıdaki örnek, sanal bir özellik gösterir:

class MyBaseClass
{
    // virtual auto-implemented property. Overrides can only 
    // provide specialized behavior if they implement get and set accessors. 
    public virtual string Name { get; set; }

    // ordinary virtual property with backing field 
    private int num;
    public virtual int Number
    {
        get { return num; }
        set { num = value; }
    }
}


class MyDerivedClass : MyBaseClass
{
    private string name;

   // Override auto-implemented property with ordinary property 
   // to provide specialized accessor behavior. 
    public override string Name
    {
        get
        {
            return name;
        }
        set
        {
            if (value != String.Empty)
            {
                name = value;
            }
            else
            {
                name = "Unknown";
            }
        }
    }

}

Sanal özellikleri bildirimi ve çağırma Sözdizimi farklılıkları haricinde Soyut yöntemler gibi davranır.

  • Kullanmak için bir hata olduğunu virtual değiştirici statik özellikte.

  • Sanal devralınan özelliğini kullanan bir özellik bildirimi ekleyerek türetilmiş bir sınıfta kılınabilir override değiştirici.

Örnek

Bu örnekte, Shape sınıf içeren iki koordinatları x, yve Area() sanal bir yöntem.Farklı şekil sınıfları gibi Circle, Cylinder, ve Sphere miras Shape sınıf ve yüzey alanı her şekil için hesaplanır.Türetilmiş her sınıf override uygulaması kendi sahip Area().

Dikkat devralınan sınıfları Circle, Sphere, ve Cylinder tüm aşağıdaki bildiriminde gösterildiği gibi temel sınıf başlatmak oluşturucularını kullanın.

public Cylinder(double r, double h): base(r, h) {}

Aşağıdaki program hesaplar ve uygun uygulanmasındaki çağırarak her şekil için uygun alan görüntüler Area() yöntemi ile ilişkili olan nesneye göre yöntemi.

class TestClass
{
    public class Shape
    {
        public const double PI = Math.PI;
        protected double x, y;
        public Shape()
        {
        }
        public Shape(double x, double y)
        {
            this.x = x;
            this.y = y;
        }

        public virtual double Area()
        {
            return x * y;
        }
    }

    public class Circle : Shape
    {
        public Circle(double r) : base(r, 0)
        {
        }

        public override double Area()
        {
            return PI * x * x;
        }
    }

    class Sphere : Shape
    {
        public Sphere(double r) : base(r, 0)
        {
        }

        public override double Area()
        {
            return 4 * PI * x * x;
        }
    }

    class Cylinder : Shape
    {
        public Cylinder(double r, double h) : base(r, h)
        {
        }

        public override double Area()
        {
            return 2 * PI * x * x + 2 * PI * x * y;
        }
    }

    static void Main()
    {
        double r = 3.0, h = 5.0;
        Shape c = new Circle(r);
        Shape s = new Sphere(r);
        Shape l = new Cylinder(r, h);
        // Display results:
        Console.WriteLine("Area of Circle   = {0:F2}", c.Area());
        Console.WriteLine("Area of Sphere   = {0:F2}", s.Area());
        Console.WriteLine("Area of Cylinder = {0:F2}", l.Area());
        }
    }
    /*
        Output:
        Area of Circle   = 28.27
        Area of Sphere   = 113.10
        Area of Cylinder = 150.80
    */

C# dil belirtiminin

Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.

Ayrıca bkz.

Başvuru

Değiştiriciler (C# Başvurusu)

C# Anahtar Sözcükleri

Çok Biçimlilik (C# Programlama Kılavuzu)

abstract (C# Başvurusu)

override (C# Başvurusu)

new (C# Başvurusu)

Kavramlar

C# Programlama Kılavuzu

Diğer Kaynaklar

C# Başvurusu