C# Metotlara new anahtar kelimesi yazmak

Katılım
11 Eylül 2020
Mesajlar
1.857
Çözümler
6
Yer
Almanya
Daha fazla  
Cinsiyet
Erkek
Meslek
König
Merhaba. C# da Ana sınıfa bir metot yazıp sonra türemiş sınıfta tekrardan aynı metotdan oluşturunca bana new anahtar kelimesi kullanmamı söylüyor. İnternette new anahtar kelimesinin virtual ve static olmayan metotları override etmek için kullanılan birşey olduğu yazıyor. Bu doğrumudur? Test ettiğimde böyle değilmiş gibi duruyor.
C#:
namespace YazilimCalismasi30;

internal class Program
{
    static void Main(string[] args)
    {
        B b = new B();
        A a = b;

        a.Metot1(); //A Sınıfındaki Normal Metot
        b.Metot1(); // B Sınıfındaki Normal Metot

        Console.WriteLine("***********");

        a.Metot2(); //B Sınıfındaki Virtual Metot
        b.Metot2(); // B Sınıfındaki Virtual Metot
       

        Console.ReadLine();
       
    }
}

class A
{
    public void Metot1()
    {
        Console.WriteLine("A Sınıfındaki Normal Metot");
    }
    public virtual void Metot2()
    {
        Console.WriteLine("A Sınıfında Çalışan Virtual Metot");
    }
}
class B : A
{
    public new void Metot1()
    {
        Console.WriteLine("B Sınıfındaki Normal Metot");
    }
    public override void Metot2()
    {
        Console.WriteLine("B Sınıfında Çalışan Virtual Metot");
    }
}
 
Metotlarda new demek tam olarak ne işe yarıyor?
Normalde new demezsen de aynı şekilde çalışması lazım, oraya new ekleyerek işi kuralına göre yapmış oluyorsun, compiler a haber veriyorsun bak üst sınıfın methodu var ben bundan haberdarım, üst sınıftan türemiş alt sınıfta da aynı isimde method var, evet, bilerek yaptım, o method farklı bu method is yeni bir method (new) diyorsun. New demezsen compiler endişeleniyor, ben bunu çalıştırırım ama seni uyarayım gene de diyor.
 
Metotlarda New demek tam olarak ne işe yarıyor?

Metotları kısaca açıklamak gerekirse, belirli bir işlevi yerine getirmek için hazırlanmış belir bir kod bloğunu bir isim altında toplayıp, kodu çalıştırmak istediğimiz yerde vermiş olduğumuz isimle çağırıp içerisinde ki kodun yeniden kullanılmasına izin veren programlama yapılarıdır.

Buradaki makale'de detaylı bir anlatım var bakabilirsiniz, muhtemelen sorununuzu çözecektir.
 
Metotlarda new demek tam olarak ne işe yarıyor?
Evet, "new" anahtar kelimesi, kalıtım yapılarında türetilmiş sınıflarda, temel sınıfta tanımlanmış olan bir metodu veya özelliği gizlemek (masking) veya geliştirmek (shadowing) için kullanılır. "override" anahtar kelimesi ise, temel sınıfta tanımlanmış olan bir sanal (virtual) metodu türetilmiş sınıfta yeniden tanımlamak için kullanılır.

Yani, türetilmiş sınıfta bir metot tanımladığınızda, eğer bu metot temel sınıfta zaten tanımlanmışsa ve siz değiştirerek farklı bir işlevsellik eklemek istiyorsanız "new" anahtar kelimesini kullanmanız gerekir. "override" anahtar kelimesi ise, temel sınıfta zaten tanımlanmış olan bir sanal metodu aynı isim ve imza ile türetilmiş sınıfta yeniden tanımlamak için kullanılır.

Örneğinizde, A sınıfındaki Metot1 normal bir metot iken, B sınıfında "new" anahtar kelimesi kullanarak Metot1'i tekrar tanımlamışsınız. Bu durumda, B sınıfından bir nesne oluşturduğunuzda bu sınıfın Metot1'i çağrılacaktır. Ancak A sınıfından bir nesne oluşturduğunuzda, A sınıfındaki Metot1 çağrılacaktır.

Öte yandan, A sınıfındaki Metot2 bir sanal metot olduğu için, B sınıfında "override" anahtar kelimesi kullanarak yeniden tanımlamışsınız. Bu durumda, B sınıfından bir nesne oluşturduğunuzda B sınıfındaki Metot2 çağrılacaktır, ancak A sınıfından bir nesne oluşturduğunuzda bile B sınıfındaki Metot2 çağrılacaktır (çünkü sanal bir metot olduğu için, türetilmiş sınıfta yeniden tanımlanmışsa, türetilmiş sınıftaki metot çağrılacaktır).
 

Technopat Haberler

Geri
Yukarı