Resolve error 'there is no argument given that corresponds to required formal parameter' Hatası ve Çözümü

    

    Toparlamak gerekirse, verdiğim örnekte bu hata constructor method'un parametrelerini vermememden kaynaklıydı. BU HATANIN SEBEBİ CONSTRUCTOR METHOD'A PARAMETRELERİNİN VERİLMEMESİDİR diyebiliriz.     Herkese selamlar. Bugün, çözümü aslında gözümüzün önünde olan ama hatayı aldığımızda her şeyi düzgün yapmamıza rağmen hala kodun çalışmadığını düşündürten bir hatanın çözümünü anlatacağım.

    Ben de bu hatayla yakın zamanda karşılaştım, şu şekilde oldu:

    Bir 'Bin Packing' algoritması  üzerinde çalışıyordum.(bin packing ifadesini ilk defa duyduysanız, her ne kadar bu problemin çözümü ile alakasız olsa da, internette kısa bir araştırma yapmanızı öneririm.). Bir Container nesnesi oluşturmak istedim. Kendisinden nesne türemek istediğim Container.cs sınıfı:(Şunu belirtmeliyim, eğer encapsulation prensibine uygun olarak property'lerimi private olarak tanımlasaydım bu sorunu en baştan yaşamayacaktım.)

public class Container
{
    private decimal volume;

    public int ID { get; set; }

    public decimal Length { get; set; }

    public decimal Width { get; set; }

    public decimal Height { get; set; }

    public decimal Volume
    {
        get
        {
            return volume;
        }
        set
        {
            volume = value;
        }
    }

    public Container(int id, decimal length, decimal width, decimal height)
    {
        ID = id;
        Length = length;
        Width = width;
        Height = height;
        Volume = length * width * height;
    }
}

    Nesneyi oluştururken Container nesnesinin benden istediği gibi constructor parametrelerini girmektense aşağıda yaptığım gibi property'lerini değiştirmeye çalıştım.

    Bu kullanım yüzünden hata aldım. İlk bakışta amatör bir yazılımcı için her şey doğruymuş gibi görünebilir ancak Container nesnesinin constructor parametrelerini boş bıraktım, bu yüzden aşağıdaki hatayı aldım:

     Toparlamak gerekirse, verdiğim örnekte bu hata constructor method'un parametrelerini vermememden kaynaklıydı. BU HATANIN SEBEBİ CONSTRUCTOR METHOD'A PARAMETRELERİNİN VERİLMEMESİDİR diyebiliriz.

Çözüm:


    Çözüm çok basit, zaten pek çoğunuz fark etmiştir. Aslında sorun bir dalgınlıktan kaynaklanıyor.
Çözüm yolu encapsulation'ı doğru uygulamak yani Container.cs içerisindeki property'leri private tanımlayıp başka yerlerde Container.cs sınıfı çağırıldığında burada yalnızce constructor üzerinden 'initialize' etmeye izin vermektir.

Görüşmek üzere :)


Yorumlar