Aracılığıyla paylaş


Devralma (C# Programlama Kılavuzu)

Miras, saklama ve çok biçimlilik, birlikte olduğu üç birincil özellikleri birini (veya dayanaklarından) nesne yönelimli programlama.Miras, yeniden kullanılması, uzatma ve diğer sınıflarda tanımlanmış davranışını değiştirmek yeni sınıflar oluşturmak sağlar.Üyeleri devralınır sınıf adı verilen temel sınıf, bu üyeler devralan bir sınıf olarak adlandırılır ve türetilmiş sınıf.Türetilmiş bir sınıf, yalnızca bir doğrudan temel sınıfı olabilir.Ancak, devralma geçişlidir.ClassC ClassB türetilmiştir ve ClassB ClassA türetilmiş, ClassC, ClassB ve ClassA olarak bildirilen üyeler devralır.

[!NOT]

Yapılar mirası desteklemez, ancak arabirimleri uygulayabilirsiniz.Daha fazla bilgi için bkz. Arabirimler (C# Programlama Kılavuzu).

Kavramsal açıdan, türetilmiş bir sınıf uzmanlığı temel sınıfın ' dir.Örneğin, temel bir sınıf olan Animal, adlı bir türetilmiş sınıf olabilir Mammal ve adlı başka bir türetilmiþ sýnýf Reptile.A Mammal olan bir Animalve bir Reptile olan bir Animal, ancak farklı specializations temel sınıfın türetilmiş her sınıf gösterir.

Bir sınıfın başka bir sınıftan türer tanımladığınızda, türetilmiş bir sınıf temel sınıf, Kurucular ve yıkıcı haricinde tüm üyeleri dolaylı olarak kazanır.Türetilmiş bir sınıf böylece kodu temel sınıfta, re-implement gerek kalmadan yeniden kullanabilirsiniz.Türetilmiş bir sınıf, daha fazla üye ekleyebilirsiniz.Bu şekilde, türetilmiş bir sınıf temel sınıfın işlevselliğini uzatır.

Aşağıdaki resimde bir sınıfı gösterir WorkItem temsil eden bazı iş Süren iş öğesi.Tüm sınıfları gibi onu türetildiği Object ve tüm yöntemleri miras alır.WorkItemkendi beş üye ekler.Kurucular miras alınmaz çünkü bunlar bir kurucusu vardır.Sınıf ChangeRequest devraldığı WorkItem ve belirli bir iş öğesi türünü temsil eder.ChangeRequestDevralındığı üyelerine iki üye ekler WorkItem ve Object.Kendi kurucu eklemeniz gerekir ve ayrıca ekler originalItemID.Özellik originalItemID sağlayan ChangeRequest özgün ile ilişkili örnek WorkItem değişiklik isteği geçerli olduğu için.

Sınıf mirası

Sınıf Devralma

Aşağıdaki örnek, nasıl sınıf ilişkileri Yukarıdaki çizimde gösterildiği C# ile ifade edilir gösterir.Örnekte de gösterildiği nasıl WorkItem sanal bir yöntem geçersiz kılar Object.ToStringve nasıl ChangeRequest sınıfı miras WorkItem yöntemi.

// WorkItem implicitly inherits from the Object class. 
public class WorkItem
{
    // Static field currentID stores the job ID of the last WorkItem that 
    // has been created. 
    private static int currentID;

    //Properties. 
    protected int ID { get; set; }
    protected string Title { get; set; }
    protected string Description { get; set; }
    protected TimeSpan jobLength { get; set; }

    // Default constructor. If a derived class does not invoke a base- 
    // class constructor explicitly, the default constructor is called 
    // implicitly.  
    public WorkItem()
    {
        ID = 0;
        Title = "Default title";
        Description = "Default description.";
        jobLength = new TimeSpan();
    }

    // Instance constructor that has three parameters. 
    public WorkItem(string title, string desc, TimeSpan joblen)
    {
        this.ID = GetNextID();
        this.Title = title;
        this.Description = desc;
        this.jobLength = joblen;
    }

    // Static constructor to initialize the static member, currentID. This 
    // constructor is called one time, automatically, before any instance 
    // of WorkItem or ChangeRequest is created, or currentID is referenced. 
    static WorkItem()
    {
        currentID = 0;
    }


    protected int GetNextID()
    {
        // currentID is a static field. It is incremented each time a new 
        // instance of WorkItem is created. 
        return ++currentID;
    }

    // Method Update enables you to update the title and job length of an 
    // existing WorkItem object. 
    public void Update(string title, TimeSpan joblen)
    {
        this.Title = title;
        this.jobLength = joblen;
    }

    // Virtual method override of the ToString method that is inherited 
    // from System.Object. 
    public override string ToString()
    {
        return String.Format("{0} - {1}", this.ID, this.Title);
    }
}

// ChangeRequest derives from WorkItem and adds a property (originalItemID)  
// and two constructors. 
public class ChangeRequest : WorkItem
{
    protected int originalItemID { get; set; }

    // Constructors. Because neither constructor calls a base-class  
    // constructor explicitly, the default constructor in the base class 
    // is called implicitly. The base class must contain a default  
    // constructor. 

    // Default constructor for the derived class. 
    public ChangeRequest() { }

    // Instance constructor that has four parameters. 
    public ChangeRequest(string title, string desc, TimeSpan jobLen,
                         int originalID)
    {
        // The following properties and the GetNexID method are inherited  
        // from WorkItem. 
        this.ID = GetNextID();
        this.Title = title;
        this.Description = desc;
        this.jobLength = jobLen;

        // Property originalItemId is a member of ChangeRequest, but not  
        // of WorkItem. 
        this.originalItemID = originalID;
    }
}

class Program
{
    static void Main()
    {
        // Create an instance of WorkItem by using the constructor in the  
        // base class that takes three arguments.
        WorkItem item = new WorkItem("Fix Bugs",
                                     "Fix all bugs in my code branch",
                                     new TimeSpan(3, 4, 0, 0));

        // Create an instance of ChangeRequest by using the constructor in 
        // the derived class that takes four arguments.
        ChangeRequest change = new ChangeRequest("Change Base Class Design",
                                                 "Add members to the class",
                                                 new TimeSpan(4, 0, 0),
                                                 1);

        // Use the ToString method defined in WorkItem.
        Console.WriteLine(item.ToString());

        // Use the inherited Update method to change the title of the  
        // ChangeRequest object.
        change.Update("Change the Design of the Base Class",
            new TimeSpan(4, 0, 0));

        // ChangeRequest inherits WorkItem's override of ToString.
        Console.WriteLine(change.ToString());

        // Keep the console open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/* Output:
    1 - Fix Bugs
    2 - Change the Design of the Base Class
*/

Soyut ve sanal yöntemleri

Temel sınıf yöntemi olarak bildirir ne zaman sanal, türetilmiş bir sınıf geçersiz kılma kendi uygulama yöntemiyle.Bir temel sınıf üyesi olarak bildirirse soyut, doğrudan bu sınıftan kalıtımla alan herhangi bir soyut olmayan sınıf yöntemi geçersiz kılınmalıdır.Türetilmiş bir sınıf kendisi ise soyut, bu soyut üyeleri uygulamadan devralır.Soyut ve sanal üyeleri için çok biçimlilik, nesne tabanlı programlama ikinci birincil özelliği olduğu temelidir.Daha fazla bilgi için bkz. Çok Biçimlilik (C# Programlama Kılavuzu).

Soyut temel sınıflar

Bir sınıf olarak bildirebilirsiniz soyut kullanarak doğrudan engellemek istiyorsanız, Yeni anahtar sözcüğü.Bunu yaparsanız, yalnızca yeni bir sınıf adresinden türetilir, sınıfı kullanılabilir.Soyut bir sınıf içerebilir veya daha fazla yöntem imzaları, kendilerini soyut olarak bildirilir.Bu imzaları parametrelerini belirtin ve dönüş değeri ancak uygulaması (yöntem gövdesi) yok.Soyut bir sınıf soyut üyelerini içermesi gerekmez; Ancak, bir sınıfın soyut bir üye içeriyorsa, bu sınıf Özet olarak bildirilmelidir.Soyut olmayan türetilmiş sınıflar kendilerini herhangi bir soyut temel sınıf soyut yöntemleri bir uygulama sağlamanız gerekir.Daha fazla bilgi için bkz. Soyut ve Korumalı Sınıflar ve Sınıf Üyeleri (C# Programlama Kılavuzu).

Arayüzler

Bir arabirimi , yalnızca soyut üyeleri oluşan bir soyut temel sınıf için biraz benzer bir başvuru türüdür.Bir sınıf bir arabirim geliştirdiğinde, arabirimin tüm üyeleri için bir uygulama sağlamanız gerekir.Olsa da yalnızca bir tek doğrudan Temel sınıftan türemesine bir sınıfın birden çok arabirim uygulayabilirsiniz.

Arabirimler mutlaka sahip sınıflar için belirli özellikleri tanımlamak için kullanılan bir "olan bir" ilişki.Örneğin, IEquatable arabirimi herhangi bir sınıf ya da vardır (ancak eşdeğerlik türü tanımlar), iki nesne türü eşdeğer olup olmadığını belirlemek istemci kodu etkinleştirmek için yapı tarafından uygulanabilir.IEquatableaynı tür gelmez "olan bir" temel bir sınıf ve türetilmiş bir sınıf arasında var olan ilişkileri (örneğin, bir Mammal olan bir Animal).Daha fazla bilgi için bkz. Arabirimler (C# Programlama Kılavuzu).

Temel sınıf üyesi türetilmiş sınıf erişimi

Türetilmiş bir sınıf bir temel sınıfın public, protected, iç ve korumalı iç üyeleri erişebilir.Türetilmiş bir sınıf temel sınıfın özel üyelerine miras olsa da, bu üyeler erişemiyor.Ancak, bu özel üyeler türetilmiş sınıfta kalıyor ve taban sınıfta kendisi yapmayı tercih aynı iş yapabilirsiniz.Örneğin, korumalı temel sınıf yöntemi bir özel alan erişen varsayalım.Bu alan düzgün çalışması devralınan temel sınıf yöntemi için türetilmiş bir sınıf içinde bulunması gerekir.

Daha fazla elde edilmesini önleme

Bir sınıf diğer sınıfların, veya kendi üyelerinden biri veya üye olarak bildirerek devralmasını önleyebilirsiniz mühürlenmiş.Daha fazla bilgi için bkz. Soyut ve Korumalı Sınıflar ve Sınıf Üyeleri (C# Programlama Kılavuzu).

Temel sınıf üyelerinin türetilmiş sınıf gizleme

Türetilmiş bir sınıf temel sınıf üyesi aynı ada ve imzaya sahip üyeleri bildirerek gizleyebilirsiniz.Yeni değiştiricisi üye temel üyenin geçersiz kılma olarak tasarlanmamıştır açıkça belirtmek için kullanılabilir.Kullanımını Yeni gerekmez, ancak Derleyici uyarı oluşturulan Yeni kullanılmaz.Daha fazla bilgi için, 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).

Ayrıca bkz.

Başvuru

Sınıflar ve Yapılar (C# Programlama Kılavuzu)

class (C# Başvurusu)

struct (C# Başvurusu)

Kavramlar

C# Programlama Kılavuzu