Bu çok sık rastlanan bir sorundur ve pek çok geçici çözüm vardır, ancak aslında neler olup bittiğini ve neden çalışmadığını anlamak istiyorum.
Bu yüzden bir test solüsyonu içerisinde 3 meclisleri var, ilk montaj Classa yazın sahiptir: İlk takımınıAçık döküm işleci "derleme başvurulan" hatasıyla başarısız oluyor
public class ClassA
{
public string Name { get; set; }
}
İkinci montaj referansları vardır ve ClassB:
yazmak için döküm için açık bir operatör varpublic class ClassB
{
public string Name { get; set; }
public static explicit operator ClassA(ClassB objB)
{
return new ClassA
{
Name = objB.Name
};
}
}
A sınıfı. Bir nedenle miras kullanamayacağımızı ve sadece bir türünü diğerine dönüştürmenin uygun bir yolu olarak döküm kullanamayacağımızı varsayalım.
Şimdi son montaj referanslar ikinci montaj (! Olmayan ilk) ve sahip ClassC yazın: ClassB aynı nedenden dolayı açık dökme operatörünü kullanan
public class ClassC
{
public string Name { get; set; }
public static explicit operator ClassB(ClassC objC)
{
return new ClassB
{
Name = objC.Name
};
}
}
. Şimdi
ilginç kısmı
: Böyle, benim kodunda ClassB için ClassC yayın yapmayı denerseniz:ClassC objC = new ClassC();
ClassB objB = (ClassB)objC;
aşağıdaki hatayı alıyorum:
Error 1 The type 'FirstAssembly.ClassA' is defined in an assembly that is not referenced. You must add a reference to assembly 'FirstAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
kolayca yeni yaratabilir ClassB örneğidir ve onu ClassC örneğindeki değerlerle başlatır (örneğin, açık cast operatörünün içinde yaptığım gibi) ve iyi çalışır. Peki buradaki sorun nedir? C# Dili Şartnamenin
bölümünde
Eğer bunu kendiniz yaparsanız, ne yapacağınızı biliyorsunuz; ancak dökümcüyü kullanırsanız, derleyiciye, ClassA hakkında bilmesi gereken dökümanın kurallarına göre davranmasını söylersiniz. – TaW
Ama neden? ClassA'ya hiçbir yere gitmiyorum. Oyunun bu kurallarının ayrıntılı olarak açıklandığı bir kaynak belge var mı? –
İlginç bir soru! Bunu kendi başıma test ettim ve * ClassB' * örneğinin yaratılmasının başarısız olacağını çünkü çalışma zamanının ClassB'nin açık oyuncu kadrosunu değerlendiremediğini umuyordum. Şaşırtıcı şekilde çalıştı! Sanırım bir şekilde statik üyelerin bağlanmasıyla ilgili. – Carsten