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ı GetArea
GetArea
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 , abstract
veya override
olmalı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 , static
veya 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 , abstract
veya override
olmalı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ı Employee
bir temel sınıfı ve adlı SalesEmployee
türetilmiş bir sınıfı tanımlar. sınıfı SalesEmployee
ek bir alan salesbonus
iç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.