2013-06-14 13 views
5

Diğer geçersiz kılma yapıcısını kullanan kurucuya karar vermek C# 'da görülebilir mi? Aşağıdaki kod derleme yapmıyor! Hangi çağrının kullanıldığını bilmiyorum.Bir kurucu, hangi diğer kurucunun çağırmak için geçersiz kıldığını belirleyen bir mantık içerebilir mi?

class IntRange { 

    public IntRange(int min, int max) { 
     // write code here 
    } 

    public static IntRange Construct(int val, bool isMax) { 
     if (isMax) { 
      return new IntRange(0, val); 
     } else { 
      return new IntRange(val, int.MaxValue); 
     } 
    } 
} 

şöyle

public IntRange(int val, bool isMax) 
     : isMax ? this() : this() 
    { 
     if (isMax) 
     { 
      IntRange(0, val); 
     } 
     else 
     { 
      IntRange(val, int.MaxValue); 
     } 
    } 
+4

Hayır, ortak mantığı özel yöntemlere ayırın ve 'isMax 'değerine bağlı olarak bunları yapıcı içinde arayın. – vcsjones

+3

Bu kararı, _any_ yapıcısını çağırmadan önce yapmış olmanız daha iyi olurdu. – DonBoitnott

+3

C# 'da değil. IL'de yasal olarak yapılabileceğini düşünüyorum. –

cevap

9

ne dersiniz:

class IntRange { 
     public IntRange(int val, bool isMax) 
     : this(isMax ? 0 : val, isMax ? val : int.MaxValue) { 
     } 
     public IntRange(int min, int max) { 
     } 
    } 
+0

Muhtemelen çok fazla kullanılmayacaksa ya da aramayı daha kolay hale getirecek şekilde varsayılan bir parametredir (yanlış). –

2

Sen Hatta yapıcı public IntRange(int min, int max) özel, statik yöntemin kullanılmasını zorlamak için yapabilir nesne üzerinde statik bir yöntem kullanılarak bu tür şeyleri elde edebiliriz.

Bunun yerine, bir alt sınıf oluşturmak isteyebilirsiniz, özellikle bu gibi nesneleri oluşturmak için statik yöntemler buluyorum.

+0

Fabrika metodu yaklaşımı. Güzel. Genelde statik olmayan kurucuyu not aldığınız şekilde bu senaryoda özel yapardım. –

0

Çünkü deyimi isMax ait derleme değil? this(): this() sonra bir kurucuda: sadece aynı sınıfın temel sınıf yapıcısı veya aşırı yükleniciler arıyoruz.

İlgili konular