SORU
29 Kasım 2009, Pazar


C# yapıcı zincirleme? (Ne yapmalı?)

Bu sözde süper basit bir soru olduğunu biliyorum, ama biraz zaman kavramı ile şimdi mücadele ediyorum. Benim soru, nasıl c kurucular zinciri musunuz.? İlk OOP dersinde ben sadece öğreniyorum. Yapıcı nasıl çalışır ya da nasıl uygulanacağı, hatta sadece zincirleme olmadan kurucular yapmamaktan daha iyidir anlamıyorum.

Bir açıklama ile bazı örnekler memnun olurum.

Nasıl onları nasıl zincir? Gider iki ile biliyorum:

public SomeClass this: {0}

public SomeClass
{
    someVariable = 0
} 

Ama nasıl üç, dört ve benzeri ile yapıyorsun?

Yine, bu bir acemi bir soru olduğunu biliyorum, ama bunu anlamakta güçlük çekiyorum ve neden bilmiyorum.

CEVAP
29 Kasım 2009, Pazar


Standart sözdizimi (bir yöntem gibi this kullanarak) aşırı almak için kullanıniçindesınıfı:

class Foo {
    private int id;
    private string name;
    public Foo() : this(0, "") {
    }
    public Foo(int id, string name) {
        this.id = id;
        this.name = name;
    }
    public Foo(int id) : this(id, "") {
    }
    public Foo(string name) : this(0, name) {
    }
}

sonra:

Foo a = new Foo(), b = new Foo(123), c = new Foo("abc"), d = new Foo(456,"def");

Not ayrıca:

  • zincir base-type base(...) kullanarak kurucular için
  • her kurucu ekstra kod koyabilirsiniz
  • varsayılan eğer bir şey belirtmek musun eğer mi () base()

"Neden?":?

  • azaltma (her zaman iyi bir şey) kodu
  • gereklivarsayılan olmayan bir taban kurucusunu çağırmak için, örneğin:

    SomeBaseType(int id) : base(id) {...}
    

Ayrıca benzer bir şekilde nesne başlatıcılar, gerçi kullanabilirsiniz (bir şey yazmaya gerek kalmadan):

SomeType x = new SomeType(), y = new SomeType { Key = "abc" },
         z = new SomeType { DoB = DateTime.Today };

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ciaran Blumenfeld

    Ciaran Blume

    20 NİSAN 2009
  • AutoStream's Garage419

    AutoStream's

    15 EKİM 2007
  • Google Analytics

    Google Analy

    25 ŞUBAT 2008