iç içe genel sınıfları anlama C# quiz
C hakkında bir doktor arkadaşımla konuşurken# bana biraz C gösterdi# çıktı tahmin ettiğim kod. Bu ilk etapta basit görünüyordu, ama değildi. Gerçekten C neden anlayamıyorum# görür bu şekilde.
Kod:
public class A<T1>
{
public T1 a;
public class B<T2> : A<T2>
{
public T1 b;
public class C<T3> : B<T3>
{
public T1 c;
}
}
}
class Program
{
static void Main(string[] args)
{
A<int>.B<char>.C<bool> o = new A<int>.B<char>.C<bool>();
Console.WriteLine(o.a.GetType());
Console.WriteLine(o.b.GetType());
Console.WriteLine(o.c.GetType());
Console.ReadKey();
}
}
Çıktı
System.Boolean
System.Char
System.Int32
Eğer yanılıyorsam beni Düzelt, ama o.a
tip B<T3>
B<T2>
C<T3>
miras A<T2>
devraldığı çünkü bool olduğunu anlıyorum. Az da olsa o.c
c
tipi dış sınıftan alır T1
çünkü int (sanırım) olduğunu anlayabiliyorum.
Kafamı neredeyse o.b
tip char neden olduğunu anlamaya çalışırken çok ağrıyor. Bazı biri bana bunu açıklayabilir mi?
CEVAP
Bu eski bir bilmecedir, ve oldukça zordur. Kendisi Anders verdiğim zaman cevap hakkı ilk kez çıkamadı!
İş arkadaşınız verdiğin sürüm Cyrus'un blog bence
http://blogs.msdn.com/b/cyrusn/archive/2005/08/01/446431.aspx
Biraz daha basit bir versiyonu blogumda.
http://blogs.msdn.com/b/ericlippert/archive/2007/07/27/an-inheritance-puzzle-part-one.aspx
Benim sürüm için çözüm burada
http://blogs.msdn.com/b/ericlippert/archive/2007/07/30/an-inheritance-puzzle-part-two.aspx
Kısaca, kafa karıştırıcı davranışları nedeni dış bir sınıf ve temel sınıf temel sınıf hem de var olan bir isim var o zaman "" kazandı. Eğer varsa,:
public class B
{
public class X {}
}
public class P
{
public class X
{
public class D : B
{
public class N : X {}
}
}
}
Sonra P.X.D.N
P.X
B.X
seçersiniz. Bulmaca iç içe aynı beyannamesi hem de üzerinden "dış" ve "base" arama yolları, ancak vardır . adlandırılabilir şekilde genel türler yapar ^em>farklıgenel inşaat nedeniyle her anlam.
Blog postları açıklamayı okuyun ve eğer hala net değil, daha spesifik bir soru sorarsan zaten.
Neden bir C iç içe sınıfları kullanmak...
Md5 ne anlama geliyor?...
&Quot;sp_reset_connection" exec; S...
Şablon&; imzasız int N lt> ne anlam...
PrimeFaces anlama süreci ve güncelleme...