class MyClass
{
public void MyMethod(Type targetType = typeof(MyClass))
{
}
}
typeof(MyClass)
derleme zamanı sabiti değil mi?C# neden bir varsayılan parametreyi türetmeye izin vermiyor?
class MyClass
{
public void MyMethod(Type targetType = typeof(MyClass))
{
}
}
typeof(MyClass)
derleme zamanı sabiti değil mi?C# neden bir varsayılan parametreyi türetmeye izin vermiyor?
-Named and Optional Parameters: bu duruma bağlı olarak farklı sonuçlar döndürebilir olarak
A default value must be one of the following types of expressions:
a constant expression;
an expression of the form new ValType(), where ValType is a value type, such as an enum or a struct;
an expression of the form default(ValType), where ValType is a value type.
typeof
. örneğiniz, basit bir sınıfta bir yazım özelliği sunuyor, ancak sınıf jenerikse ne olurdu?
class MyClass<T>
{
public void MyMethod(Type targetType = typeof(MyClass<T>))
{
}
}
Bir IL uzmanı değilim ama L_0005 bir yöntemini çağırır görünüyor: Açıkçası bu kadar sabit değildir
return typeof(int);
IT'S aynısının:
.maxstack 1
.locals init (
[0] class [mscorlib]System.Type typeofvar)
L_0000: ldtoken int32
L_0005: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
L_000a: stloc.0
L_000b: ldloc.0
L_000c: ret
bunu kod sabit yazı tipini tutmaz görebilirsiniz:
const Type constType = typeof(int);
bir hata verir
: kural bir şekilde olmalıdır, böylece
Constant initialize must be compile-time constant
özellikle sentezleme evet statik çözülebilir olan buIsn't
typeof(MyClass)
a compile-time constant?
ancak typeof()
, (nedeniyle jenerik) yürütülmesi sırasında değerlendirilir typeof()
çağrısı derleme zamanı sabiti değildir.
günde ... yapılacak böyle bir argüman yoktu C# 1.0, içinde olup olmadığını merak ediyorsun
argümanıdır. Bunun jenerik olduğunu düşünüyorum. Bunun işe yaradığını düşünüyorum: 'typeof (ClassInExternalAssembly) '. Gerçek harici montaj yüklenene kadar çözülemez ve bu nedenle sabit değildir. – Aidiakapi
typeof' derleme zamanında çözülmesi gerektiğini 'geçirilen türü. Bu yüzden ne demek istediğini göremiyorum. Söyledikleriniz doğruysa, nitelikler de 'tip sabitlerine' izin vermemelidir. – leppie
leppie, "nitelikler de" tip sabitlerine izin vermemeli "ile ne demek istiyorsun? Nitelikler değerleri sabit olarak nerede sınırlar? –
@Fujiy - Öznitelik yapısından geçirilen parametrelerin, zaman sabitlerinin derlenmesi gerekir. – Oded