2011-03-18 21 views
11

Ayrıca, isteğe bağlı yöntem parametreleri için çalışma zamanı değerlerini kullanmanın bir yolu var mı?Neden C# 4.0'da isteğe bağlı parametreler derleme zamanı sabitleri gerektirir?

+0

olası kopyası [String.Empty'yi C# 'daki isteğe bağlı bir parametre için varsayılan değer olarak kullanamazsınız - o zaman ne var?] (Http://stackoverflow.com/questions/2701314/cannot-use-string-empty- bir-varsayılan olarak-için-isteğe bağlı-parametre-in-c-keskin-değeri olarak) – nawfal

cevap

11

İsteğe bağlı parametreler, bir özniteliğin değerleri olarak yazıldığından sabit olması gerekir. Bu nedenle, bir özellik değerinin sahip olduğu tüm kısıtlamaları devralırlar.

Çalışma zamanı değerini doğrudan kodlamanın bir yolu yoktur. Ancak yakın

public void MyApi(SomeType type = null) { 
    type = type ?? new SomeType(); 
    ... 
} 
+1

Teşekkürler, bu temiz bir numara gibi görünüyor. Merak etme, neden öznitelikleri kullanarak uygulandığını biliyor musunuz? Şimdiden çerçevede olanı yeniden kullanmayı mı düşünüyorsun? –

+1

@Joan IIRC bu özelliklerle yapılır, çünkü diğer diller (VB.Net) bunu yapar ve bu nedenle onlarla uyumluluk sağlar. – JaredPar

+1

@Joan: Nitelikler kullanarak, bu özelliği olmayan dilleri bozmazlar. Unutmayın, .NET'teki her şey, dil tarafsız olması gereken bir formda derlenir ... Özellikler, diğer .NET dillerinde değişiklik yapılmasını gerektirmeden, belirli bir dilde isteğe bağlı parametreleri işlemenin temiz bir yoludur. –

5

İsteğe bağlı parametreler derleme içinde derlenir ve bu şekilde (const olarak adlandırılan her şey gibi) derleme zamanı sabiti olması gerekir.

Ve hayır, yürütme zamanı değerlerini isteğe bağlı parametreler olarak kullanamazsınız.

+1

Teşekkürler, ancak bir çalışma zamanı başvurusu için bir başvuru ile derleme yapamıyorum? Yani şöyle bir şey söyle: Bu, aynı sınıftaki vb. –

5

İsteğe bağlı parametreler derleme zamanında belirlenir ve çok az parametrelerle bir yöntem çağırırsanız yöntem haline ikame Aşağıdakiler desenle alabilirsiniz. Yöntem IL'deki parametreye bir özellik ekleyerek ele alınırlar. Bu nedenle, derleme zamanında tam olarak çözülmeleri gerekir (her ikisi de bir özellik olduklarından, aynı zamanda kullanıldığında). İsteğe bağlı yöntem parametreleri için çalışma zamanı değerlerini kullanmanın bir yolu yoktur.

İlgili konular