Bu ve sadece bir liste veya dizi alan bir yöntem oluşturmak arasındaki fark nedir?
Arasındaki fark
void M(params int[] x)
ve
void N(int[] x)
M şu şekilde adlandırılabilir:
M(1, 2, 3)
ya da bunun gibi:
M(new int[] { 1, 2, 3 });
ancak N yalnızca ikinci şekilde çağrılabilir , ilk şekilde çağrılamaz.
belki de performans üzerinde bir etkisi vardır?
Performansın etkisi, ister M
birinci şekilde ister ikinci şekilde, ister her iki şekilde de bir dizi oluşturduğunuzda olsun. Dizi oluşturmak hem performans hem de bellek gerektirdiğinden performans etkisi vardır. Performans etkilerinin performans hedeflerine göre ölçülmesi gerektiğini unutmayın; ekstra bir dizi yaratmanın maliyetinin, piyasadaki başarı ve başarısızlık arasındaki fark olan kapı faktörü olması pek olası değildir.
Sınırsız parametreli olanı ne şekilde tercih edeceğinizi tam olarak anlamıyorum veya görmüyorum.
Yöntemi çağıran kodun yazarı için tamamen ve tamamen bir kolaylıktır; o basitçe daha kısa ve daha kolay yazma için
M(1, 2, 3);
yazmak yerine
M(new int[] { 1, 2, 3 });
Arayanın tarafında birkaç tuşa dokunur. Hepsi bu.
Sormadığınız, ancak belki de cevabını bilmek istediğiniz birkaç soru:
Bu özelliğin adı nedir?
Bağımsız değişken sayıda arayan tarafında geçirilen izin yöntemler denir değişkin . Param yöntemleri C # 'ın varyasyon yöntemlerini nasıl uyguladığıdır.
Aşırı yük çözünürlüğü değişken bir yöntemle nasıl çalışır?
Aşırı yük çözümleme sorunu ile karşılaşıldığında, C # hem "normal" hem de "genişletilmiş" formları dikkate alacaktır ve her ikisi de uygulanabilirse "normal" form her zaman kazanır. Örneğin, şunu düşünün:
void P(params object[] x){}
ve bir telefonumuz var
P(null);
Uygulanabilir iki olasılık vardır. "Normal" formda, P
dizi için boş bir referans çağırıp iletiriz. "Genişletilmiş" formda çağırırız P(new object[] { null })
. Bu durumda, normal form kazanır. Bir çağrımız P(null, null)
varsa, normal form uygulanamaz ve genişletilmiş form varsayılan olarak kazanır.
Zorluk : Varsayalım var s = new[] { "hello" };
ve bir çağrı var P(s);
. Çağrı sitesinde neler olduğunu ve nedenini açıklayın. Şaşırmış olabilirsiniz!
Mücadelesi : ikimiz de olduğunu varsayalım void P(object x){}
ve void P(params object[] x){}
. Ne P(null)
işe yarar ve neden?
Mücadelesi : ikimiz de olduğunu varsayalım void M(string x){}
ve void M(params string[] x){}
. Ne M(null)
işe yarar ve neden? Bu bir önceki durumdan nasıl farklı?