override (C# başvurusu)

Değiştirici override , devralınan bir yöntemin, özelliğin, dizin oluşturucunun veya olayın soyut veya sanal uygulamasını genişletmek veya değiştirmek için gereklidir.

Aşağıdaki örnekte, sınıfın soyut Shape sınıftan Square devralındığından geçersiz kılınmış bir uygulaması GetAreaGetArea sağlaması gerekir:

abstract class Shape
{
    public abstract int GetArea();
}

class Square : Shape
{
    private int _side;

    public Square(int n) => _side = n;

    // GetArea method is required to avoid a compile-time error.
    public override int GetArea() => _side * _side;

    static void Main()
    {
        var sq = new Square(12);
        Console.WriteLine($"Area of the square = {sq.GetArea()}");
    }
}
// Output: Area of the square = 144

Bir override yöntem, temel sınıftan devralınan yöntemin yeni bir uygulamasını sağlar. Bir override bildirim tarafından geçersiz kılınan yöntem geçersiz kılınan temel yöntem olarak bilinir. Bir override yöntemin, geçersiz kılınan temel yöntemle aynı imzaya sahip olması gerekir. override yöntemleri birlikte değişken dönüş türlerini destekler. Özellikle, bir override yöntemin dönüş türü karşılık gelen temel yöntemin dönüş türünden türetilebilir.

Sanal olmayan veya statik bir yöntemi geçersiz kılamazsınız. Geçersiz kılınan temel yöntem , abstractveya overrideolmalıdırvirtual.

Bir override bildirim yöntemin erişilebilirliğini virtual değiştiremez. override Hem yöntem hem virtual de yöntem aynı erişim düzeyi değiştiricisine sahip olmalıdır.

Bir override yöntemi değiştirmek için , staticveya virtual değiştiricilerini kullanamazsınıznew.

Geçersiz kılma özelliği bildirimi, devralınan özellikle tam olarak aynı erişim değiştiriciyi, türü ve adı belirtmelidir. Salt okunur geçersiz kılma özellikleri birlikte değişken dönüş türlerini destekler. Geçersiz kılınan özellik , abstractveya overrideolmalıdırvirtual.

Anahtar sözcüğün override nasıl kullanılacağı hakkında daha fazla bilgi için bkz. Geçersiz Kılma ve Yeni Anahtar Sözcükler ile Sürüm Oluşturma ve Geçersiz Kılma ve Yeni Anahtar Sözcüklerin ne zaman kullanılacağını bilmek. Devralma hakkında bilgi için bkz . Devralma.

Örnek

Bu örnek, adlı Employeebir temel sınıfı ve adlı SalesEmployeetüretilmiş bir sınıfı tanımlar. sınıfı SalesEmployee ek bir alan salesbonusiçerir ve hesaba katmak için yöntemini CalculatePay geçersiz kılar.

class TestOverride
{
    public class Employee
    {
        public string Name { get; }

        // Basepay is defined as protected, so that it may be
        // accessed only by this class and derived classes.
        protected decimal _basepay;

        // Constructor to set the name and basepay values.
        public Employee(string name, decimal basepay)
        {
            Name = name;
            _basepay = basepay;
        }

        // Declared virtual so it can be overridden.
        public virtual decimal CalculatePay()
        {
            return _basepay;
        }
    }

    // Derive a new class from Employee.
    public class SalesEmployee : Employee
    {
        // New field that will affect the base pay.
        private decimal _salesbonus;

        // The constructor calls the base-class version, and
        // initializes the salesbonus field.
        public SalesEmployee(string name, decimal basepay, decimal salesbonus)
            : base(name, basepay)
        {
            _salesbonus = salesbonus;
        }

        // Override the CalculatePay method
        // to take bonus into account.
        public override decimal CalculatePay()
        {
            return _basepay + _salesbonus;
        }
    }

    static void Main()
    {
        // Create some new employees.
        var employee1 = new SalesEmployee("Alice", 1000, 500);
        var employee2 = new Employee("Bob", 1200);

        Console.WriteLine($"Employee1 {employee1.Name} earned: {employee1.CalculatePay()}");
        Console.WriteLine($"Employee2 {employee2.Name} earned: {employee2.CalculatePay()}");
    }
}
/*
    Output:
    Employee1 Alice earned: 1500
    Employee2 Bob earned: 1200
*/

C# dili belirtimi

Daha fazla bilgi için C# dil belirtiminin Geçersiz kılma yöntemleri bölümüne bakın.

Kovarant dönüş türleri hakkında daha fazla bilgi için özellik teklifi notu'na bakın.

Ayrıca bkz.