ambil alih (referensi C#)
Pengubah override
dibutuhkan untuk memperluas atau memodifikasi implementasi abstrak atau virtual dari metode, properti, pengindeks, atau peristiwa yang diwariskan.
Dalam contoh berikut, kelas Square
harus memberikan implementasi GetArea
yang ditimpa karena GetArea
diwarisi dari kelas abstrak Shape
:
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
Metode override
menyediakan implementasi baru dari metode yang diwarisi dari kelas dasar. Metode yang ditimpa oleh deklarasi override
dikenal sebagai metode dasar yang ditimpa. Metode override
harus memiliki tanda tangan yang sama dengan metode dasar yang ditimpa sebelumnya. override
metode mendukung jenis pengembalian kovarian. Secara khusus, jenis override
pengembalian metode bisa berasal dari jenis pengembalian metode dasar yang sesuai.
Anda tidak bisa menimpa metode non-virtual. Metode dasar yang ditimpa harus virtual
, abstract
, atau override
.
Deklarasi override
tidak bisa mengubah aksesibilitas virtual
metode. Metode override
dan virtual
metode harus memiliki pengubah tingkat akses yang sama.
Anda tidak bisa menggunakan pengubah new
, static
, atau virtual
untuk mengubah override
metode.
Penimpaan deklarasi properti harus menentukan pengubah, jenis, dan nama akses yang sama persis dengan properti yang diwariskan. Properti penggantian baca-saja mendukung jenis pengembalian kovarian. Properti yang ditimpa harus virtual
, abstract
, atau override
.
Untuk informasi lebih lanjut tentang cara menggunakan kata kunci override
, lihat Penerapan Versi dengan Penimpaan dan Kata Kunci Baru dan Mengetahui Kapan Harus Menggunakan Penimpaan dan Kata Kunci Baru. Untuk informasi tentang pewarisan di C#, lihat Pewarisan.
Contoh
Contoh ini mengasumsikan kelas dasar bernama Employee
dan kelas turunan bernama SalesEmployee
. Kelas SalesEmployee
mencakup bidang tambahan, salesbonus
, dan mengambil alih metode CalculatePay
untuk memperhitungkannya.
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
*/
Spesifikasi bahasa C#
Untuk informasi selengkapnya, lihat bagian Struktur dari Spesifikasi bahasa C#.
Untuk informasi selengkapnya tentang jenis pengembalian kovarian, lihatlah catatan proposal fitur.
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk