2012-01-13 29 views
12

bu iki vektörlerin içine klonlanabilir olduğunu varsayalım aşağıdaki yöntemleri veya özellikleri arasındaki belirsiz "Hata 1:çağrısı

SomeClass sc = new SomeClass("Lorem ipsum"); 

Bunu alırsınız çağrı, aşağıdaki yöntemler veya özellikler arasında belirsizdir [...] "

Son sonuç aynı olduğu için hangisinin başvurduğum önemli değil (en azından bu durumda) ve bana göre hepsi t şapka meselesi şu an), bu yüzden etrafta dolaşmak için seçeneklerim neler?

DÜZENLEME 1: @oltman: Basitleştirilmiş örnek.

SomeClass sc = new SomeClass("Lorem ipsum", (Color?)null, (Font)null); 
+3

her ikisine de sahip bir nedeni var mı, yoksa sadece basitleştirilmiş bir örnektir: Burada

boş olarak sınıf geçme için başka sözdizimi? – oltman

cevap

21

Hem kurucular aynı sürede:

Sadece

[...] new SomeClass("Lorem", Color.Green) 

yerine çalışmaya zorlamak için

[...] new SomeClass("Lorem", null, Color.Green) 
+0

Bu eser harikalar yaratıyor ve tam olarak aradığım şey. –

7

bir yolu yazabilmek istiyorum argümanlar, ancak farklı bir sırayla. İki yapıcı parametresi için varsayılan değerler belirttiğiniz için, derleyici ikinci bağımsız değişken sağlanmadığında iki aşırı yük arasındaki farkı ayırt edemez.

Ben mevcut Kurucular kaldırıp aşağıdaki ile değiştirin tavsiye ediyorum:

public SomeClass(string a, Color? color, Font font) 
{ 
    // constructor implementation 
} 

public SomeClass(string a) : this(a, null, null) {} 
public SomeClass(string a, Color color) : this(a, color, null) {} 
public SomeClass(string a, Font font) : this(a, null, font) {} 
+0

sadece tek bir argüman olduğunda çok yararlı – Eli

1

sadece dize alır başka bir yapıcı ve onların ikinci parametreler zorunlu hale getirmek için yukarıdaki kurucular güncelleyebilir miyim?

fikri her zaman dize tedarik ve daha sonra isteğe bağlı şuna ne dersin, renk veya yazı tipi veya her ikisi sağlayarak nesneyi kurulabileceğini ise: "Hata:

public SomeClass(string a) 
     { 
      // ... 
     } 

public SomeClass(string a, Color? c) 
     { 
      // ... 
     } 

public SomeClass(string a, Font f, Color? d = null) 
     { 
      // ... 
     } 
0

Bunu alırsınız 1 çağrı aşağıdaki yöntemleri veya özellikleri arasındaki belirsiz [...]"

o aynı

olduğu sonuç olarak atıfta hangisinin önemi yoktur bana belli gibi görünüyor

numaralı çağrı, belirsizdir. Her kurucu benzersizdir - hem bir örnek oluşturup hem de döndürüp döndürmedikleri fark etmez, çünkü her kurucuda farklı mantık olabilir. Derleyici hala hangi kurucunun demek istediğini bilmiyor.

0

Bu, anti-pattern'un mükemmel bir örneğidir, bunun en iyi yolu @Phil Klein'in cevabıdır.

SomeClass sc = new SomeClass("Lorem ipsum", null as Color, null as Font);