Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makale aşağıdaki derleyici hatalarını kapsar:
- CS0056: Tutarsız erişilebilirlik: 'type' dönüş türü 'operator' işlecinden daha az erişilebilir
- CS0057: Tutarsız erişilebilirlik: 'type' parametre türü 'operator' işlecinden daha az erişilebilir
- CS0215: True veya False işlecinin dönüş türü bool olmalıdır
- CS0216: 'operator' işleci için eşleşen bir 'missing_operator' işleci de tanımlanmış olmalıdır
- CS0217: Kısa devre işleci olarak uygulanabilmesi için kullanıcı tanımlı mantıksal işlecin ('operator') 2 parametresinin türüyle aynı dönüş türüne sahip olması gerekir.
- CS0218: Tür ('type') true ve false operatör bildirimlerini içermelidir
-
CS0448:
++veya--işleci için dönüş türü, içeren tür olmalı veya içeren türden türetilmiş olmalıdır. - CS0552: 'dönüştürme yordamı' : kullanıcı tanımlı arabirime/arabirimden dönüştürme
- CS0553: 'dönüştürme yordamı' : temel sınıfa kullanıcı tanımlı dönüştürme
- CS0554: 'dönüştürme yordamı' : türetilmiş sınıfa/sınıftan kullanıcı tanımlı dönüştürme
- CS0555: Kullanıcı tanımlı işleç, kapsayan türden bir nesneyi alamaz ve kapsayan türün bir nesnesine dönüştüremez
- CS0556: Kullanıcı tanımlı dönüştürme, kapsayan türe veya bu türe dönüştürülmelidir
- CS0557: Türde yinelenen kullanıcı tanımlı dönüştürme
- CS0558: Kullanıcı tanımlı işleç statik ve genel olarak bildirilmelidir
-
CS0559:
++veya--işleci için parametre türü, içeren tür olmalıdır - CS0562: Birli işlecin parametresi, içeren tür olmalıdır
- CS0563: İkili işlecin parametrelerinden biri, içeren tür olmalıdır
- CS0564: Aşırı yüklenmiş vardiya işlecinin ilk işleneni, içeren türle aynı türde olmalı ve ikinci işlenenin türü int olmalıdır
- CS0567: Arabirimler işleç içeremez
- CS0590: Kullanıcı tanımlı işleçler geçersiz döndüremez
-
CS0660: Tür,
operator ==veyaoperator !=tanımlar ancakObject.Equals(object o)geçersiz kılmaz. -
CS0661: Tür,
operator ==veyaoperator !=tanımlıyor ancakObject.GetHashCode()aşmıyor - CS0715: Statik sınıflar kullanıcı tanımlı işleçler içeremez
- CS1037: Aşırı yüklenebilir operatör bekleniyor
- CS1553: Bildirim geçerli değil; 'değiştirici işleç <dest-type> (...' kullanın yerine
- CS8930: Kullanıcı tanımlı işlecin açık uygulaması statik olarak bildirilmelidir
- CS8931: Bir arabirimdeki kullanıcı tanımlı dönüştürme, kapsayan türdeki bir tür parametresine veya bu parametreden kapsayan türe kısıtlanmış olarak dönüştürülmelidir
- CS9023: İşleç kontrol edilemez duruma getirilemez.
- CS9024: İşleç kontrolsüz hale getirilemez.
- CS9025: İşleç, aynı zamanda kontrol edilmemiş eşleşen bir sürümün de bildirilmesi gerekir.
- CS9027: Beklenmeyen 'unchecked' anahtar sözcüğü.
- CS9308: Kullanıcı tanımlı işleç genel olarak bildirilmelidir.
- CS9310: Bu işlecin dönüş türü geçersiz olmalıdır.
- CS9311: Tür arayüz üyesini uygulamıyor. Tür, biri işleç olmadığından üyeyi uygulayamıyor.
- CS9312: Tür devralınan üyeyi geçersiz kılamaz çünkü bunlardan biri işleç değildir.
- CS9313: Aşırı yüklenmiş bileşik atama işleci bir parametre alır.
- CS9340: İşleç işlenenlere uygulanamaz. En yakın uygulanamaz aday gösterilir.
- CS9341: İşleç işlenene uygulanamaz. En yakın uygulanamayan aday gösterilir.
- CS9342: aşağıdaki üyeler arasında işleç çözümlemesi belirsizdir.
İşleç imzası gereksinimleri
-
CS0448:
++veya--işlecinin dönüş türü, içeren tür veya içeren türden türetilmiş olmalıdır. -
CS0559:
++veya--işleci için parametre türü, içeren tür olmalıdır. - CS0562: Birli işlecin parametresi, içeren tür olmalıdır.
- CS0563: İkili işlecin parametrelerinden biri, içeren tür olmalıdır.
- CS0564: Aşırı yüklenmiş kaydırma operatörünün ilk işlecinin türü içeren türle aynı olmalı ve ikinci işlecinin türü int olmalıdır.
- CS0567: Arayüzler işleç içeremez.
- CS0590: Kullanıcı tanımlı işleçler void döndüremez.
- CS9310: Bu işlecin dönüş türü geçersiz olmalıdır.
- CS9340: Operatör, operatörler üzerinde uygulanamaz. En yakın uygulanamaz aday gösterilmektedir.
- CS9341: İşleç işlenene uygulanamaz. En yakın uygulanabilir aday gösterilir.
- CS9342: İşleç çözümlemesi, aşağıdaki üyeler arasında belirlenemiyor.
Doğru imzalara sahip işleçleri bildirmek için, belirli işleç türü için bu gereksinimleri izleyin. Daha fazla bilgi için bkz . İşleç aşırı yüklemesi.
-
++ve--operatörlerinden içeren türü (veya türetilmiş bir türü) döndürün (CS0448). -
++ve--operatörleri için parametre olarak içeren türü kullanın (CS0559). - Tekli işleçler (CS0562) için içeren türü parametre olarak kullanın.
- İçeren türü ikili işleçlere (CS0563) en az bir parametre olarak ekleyin.
- İçeren türü ilk parametre olarak ve
intshift operatörleri (CS0564) için ikinci parametre olarak kullanın. - Arabirimlerde (CS0567) işleçleri bildirmeyin. Arabirimler işleç uygulamaları içeremez.
-
dönüşü gerektiren belirli işleçler dışında, çoğu işleçten (
void) geçersiz tür olmayan bir sonuç döndürün. - Çözüm hatalarını önlemek için doğru parametre türlerini kabul eden işleç aşırı yüklemeleri sağlayın (CS9340, CS9341).
- Açık dönüşümler kullanarak veya daha belirli aşırı yüklemeler (CS9342) sağlayarak işleç çağrılarını açıklığa kavuşturun.
Önemli
Statik ikili işleçler ve karşılık gelen örnek bileşik atama işleçleri için imza gereksinimleri farklıdır. İmzanın istediğiniz bildirimle eşleştiğinden emin olun.
Aşağıdaki örnekte imza hataları gösterilmektedir:
class C1
{
public static int operator ++(C1 c) => 0; // CS0448
public static C1 operator --(C1 c) => null; // OK
}
public class C2
{
public static implicit operator int(C2 x) => 0;
public static implicit operator C2(int x) => new C2();
public static int operator ++(int aa) => 0; // CS0559
}
public class C3
{
public static implicit operator int(C3 x) => 0;
public static implicit operator C3(int x) => null;
public static C3 operator +(int aa) => 0; // CS0562
}
public class C4
{
public static implicit operator int(C4 x) => 0;
public static implicit operator C4(int x) => null;
public static int operator +(int aa, int bb) => 0; // CS0563
}
class C5
{
// To correct, change second operand to int, like so:
// public static int operator << (C c1, int c2)
public static int operator <<(C5 c1, C5 c2) => 0; // CS0564
}
interface IA
{
int operator +(int aa, int bb); // CS0567
}
public class C6
{
public static void operator +(C6 A1, C6 A2) { } // CS0590
}
İşleç bildirimi gereksinimleri
- CS0558: Kullanıcı tanımlı işleç statik ve genel olarak bildirilmelidir.
- CS0715: Statik sınıflar kullanıcı tanımlı işleçler içeremez.
- CS1037: Aşırı yüklenebilir işleç bekleniyor.
- CS1553: Bildirim geçerli değil; bunun yerine 'değiştirici işleç <dest-type> (...' kullanın.
- CS9308: Kullanıcı tanımlı işleç genel olarak bildirilmelidir.
İşleçleri doğru şekilde bildirmek için değiştiriciler ve içeren türler için bu gereksinimleri izleyin. Daha fazla bilgi için bkz . İşleç aşırı yüklemesi ve Kullanıcı tanımlı dönüştürme işleçleri.
- hem
statichem depublicdeğiştiricileri olan işleçleri bildirme (CS0558, CS9308). - Statik sınıflarda (CS0715) işleçler bildirmeyin. Normal sınıfları veya yapıları kullanın.
- Geçerli, aşırı yüklenebilir işleç simgelerini (CS1037) kullanın.
- Dönüştürme işleçleri için doğru söz dizimini izleyin:
public static implicit/explicit operator <dest-type>(<source-type> parameter)(CS1553).
Statik soyut arabirimlerdeki işleçlerin açık arabirim uygulamalarıyla ilgili hatalar için bkz. Statik soyut ve sanal arabirim üyesi hataları.
Aşağıdaki örnekte bildirim hataları gösterilmektedir:
public class C
{
static implicit operator int(C aa) => 0; // CS0558, add public
}
public static class C1
{
public static int operator +(C1 c) => 0; // CS0715
}
class C2
{
public static int implicit operator (C2 f) => 6; // CS1553
}
Tutarsız erişilebilirlik
- CS0056: Tutarsız erişilebilirlik: 'type' geri dönüş türü 'işleç' işlecinden daha düşük erişilebilirliğe sahip.
- CS0057: Tutarsız erişilebilirlik: 'type' parametre türü 'operator' işlecinden daha az erişilebilir.
Operatör bildirimlerinde tutarlı erişilebilirlik sağlamak için genel işleçlerde kullanılan tüm türleri genel erişime açık hale getirin. Daha fazla bilgi için bkz. Erişim Değiştiricileri.
- Dönüş türlerinin, CS0056 operatörüyle en az aynı erişilebilirliğe sahip olduğundan emin olun.
- Parametre türlerinin işleçle (CS0057) en az aynı erişilebilirliği olduğundan emin olun.
Bir public işleci bildirdiğinizde, parametre veya dönüş değeri olarak kullanılan tüm türlerin de genel olarak erişilebilir olması gerekir.
Aşağıdaki örnekte erişilebilirlik hataları gösterilmektedir:
class C { }
public class C2
{
public static implicit operator C(C2 a) => new C(); // CS0056
}
public class C3
{
public static implicit operator C3(C c) => new C3(); // CS0057
}
Kullanıcı tanımlı dönüştürme kısıtlamaları
- CS0552: Kullanıcı tanımlı arabirime/arabirimden dönüştürme.
- CS0553: Temel sınıfa/sınıftan kullanıcı tanımlı dönüştürme.
- CS0554: Türetilmiş sınıfa/sınıftan kullanıcı tanımlı dönüştürme.
- CS0555: Kullanıcı tanımlı işleç, kapsayan türdeki bir nesneyi alamaz ve kapsayan türün bir nesnesine dönüştüremez.
- CS0556: Kullanıcı tanımlı dönüştürme, kapsayan türe veya kapsayan türden dönüştürmelidir.
- CS0557: Tür üzerinde yinelenen kullanıcı tanımlı dönüştürme.
Geçerli kullanıcı tanımlı dönüştürme işleçleri oluşturmak için bu kısıtlamaları izleyin. Daha fazla bilgi için bkz . Kullanıcı tanımlı dönüştürme işleçleri.
- Arabirimlere veya arabirimlerden dönüştürmeleri tanımlamayın (CS0552). Bunun yerine açık arabirim uygulamalarını kullanın.
- Temel sınıflara veya temel sınıflardan dönüşümleri tanımlamayın. Dönüştürme kalıtım yoluyla zaten var.
- Türetilmiş sınıflara veya sınıflardan (CS0554) dönüştürmeleri tanımlamayın. Dönüştürme kalıtım yoluyla zaten var.
- Kapsayan türden kendisine dönüştürmeleri tanımlama (CS0555). Bu dönüştürme örtük bir işlemdir.
- Dönüştürmedeki en az bir türün kapsayan tür (CS0556) olduğundan emin olun. İki dış tür arasındaki dönüştürmeleri tanımlayamazsınız.
- Yinelenen dönüştürmeleri tanımlama (CS0557). Her dönüştürme işleci benzersiz olmalıdır.
Aşağıdaki örnekte dönüştürme kısıtlama hataları gösterilmektedir:
public interface I
{
}
public class C
{
public static implicit operator I(C aa) => default;// CS0552
}
public class B
{
}
public class D : B
{
public static implicit operator B(D aa) => new B();// CS0553
}
public class B2
{
// delete the conversion routine to resolve CS0554
public static implicit operator B2(D2 d) => new B2();// CS0554
}
public class D2 : B2 { }
public class C2
{
public static implicit operator C2(C2 aa) => new C2(); // CS0555
}
public class C3
{
public static implicit operator int(byte aa) => 0; // CS0556
}
public class C4
{
public static implicit operator int(C4 aa) => 0;
// CS0557, delete duplicate
public static explicit operator int(C4 aa) => 0;
}
Boole ve kısa devre işleçleri
- CS0215: true veya false işlecinin dönüş türü bool olmalıdır.
- CS0216: işlecinin de tanımlanması için eşleşen bir işleç gerekir.
- CS0217: Kısa devre işleci olarak uygulanabilmesi için, kullanıcı tanımlı bir mantıksal işlecin 2 parametresinin türüyle aynı dönüş türüne sahip olması gerekir.
- CS0218: Türde true ve false işleçlerinin bildirimleri bulunmalıdır.
Mantıksal işleçleri doğru tanımlamak için bu eşleştirme ve imza gereksinimlerini izleyin. Daha fazla bilgi için bkz. true ve false işleçleri, Boole mantıksal işleçleri ve Kullanıcı tanımlı koşullu mantıksal işleçler.
-
boolveoperator trueoperator false'den geri dönün (CS0215). - Gerekli eşleştirilmiş işleçleri tanımlama (CS0216):
-
operator ==operator !=gerektirir -
operator <operator >gerektirir -
operator <=operator >=gerektirir -
operator trueoperator falsegerektirir
-
- Dönüş türünü, özel türlerle (
&) çalışan kısa devre işleçlerinin (|ve ) parametre türleriyle eşleştirin. - tr-TR: Boole bağlamlarında,
operator trueveoperator falsegibi özel türleri&&ve||kullanırken uygulayın (CS0218).
Aşağıdaki örnekte mantıksal işleç hataları gösterilmektedir:
class C
{
public static int operator true(C c) => 0; // CS0215
public static int operator false(C c) => 0; // CS0215
}
class C2
{
public static bool operator ==(C2 left, C2 right) => left.Equals(right); // CS0216
public override bool Equals(object? o) => base.Equals(o);
public override int GetHashCode() => base.GetHashCode();
}
public class C3
{
public static bool operator true(C3 f) => false;
public static bool operator false(C3 f) => true;
public static implicit operator int(C3 x) => 0;
public static int operator &(C3 f1, C3 f2) => new C3(); // CS0217
}
public class C4
{
public static implicit operator int(C4 x) => 0;
public static C4 operator &(C4 f1, C4 f2) => new C4();
public static void Main()
{
C4 f = new C4();
int i = f && f; // CS0218, requires operators true and false
}
}
Denetlenen işleçler
- CS9023: İşleç doğrulanamıyor
- CS9024: İşleç kontrolsüz yapılamaz
- CS9025: Denetlenmiş işleç, eşleşen denetlenmemiş bir sürümün de bildirilmesini gerektirir
- CS9027: Beklenmeyen 'kontrolsüz' anahtar sözcüğü
denetlenen işleçleri doğru kullanmak için bu gereksinimleri izleyin. Daha fazla bilgi için bkz. Aritmetik işleçler ve Kullanıcı tanımlı işaretli işleçler.
- Veya
checkedanahtar sözcükleri yalnızca desteklenen aritmetik işleçlere uygulayınunchecked:+,-,*,/,++, ,--ve açık dönüştürmeler (CS9023, CS9024). - İşaretli işleci (CS9025) bildirirken hem işaretli hem de işaretsiz sürümler sağlayın. Derleyicinin her ikisinin de farklı bağlamları işlemesi gerekir.
- Anahtar sözcüğünü
uncheckedyalnızca geçerli işleç bildirimi bağlamlarında (CS9027) kullanın. Bunu, söz dizimi açısından beklenmeyen konumlara yerleştirmeyin.
Arabirim ve devralma gereksinimleri
- CS9311: Tür, arabirim üyesini uygulamaz. Tür, üyeyi birinin işleç olmaması nedeniyle uygulayamıyor
- CS9312: Tür devralınmış üyeyi aşamaz çünkü bunlardan biri operatör değil
- CS9313: Aşırı yüklenmiş bileşik atama işleci bir parametre alır
İşleçleri doğru uygulamak ve geçersiz kılmak için bu gereksinimleri izleyin. Daha fazla bilgi için bkz İşleç aşırı yüklemesi ve Arabirimler.
- İşleç bildirimlerinin imzayla ve arabirim üyelerinin türüyle (CS9311) eşleştiğinden emin olun. Bir işleç, işleç olmayan bir üyeyi uygulayamaz.
- Devralınan ve geçersiz kılınan üyelerin de bir işleç (CS9312) olduğunu doğrulayın. Bir işlemci, işlemci olmayan bir üyeyi geçersiz kılamaz.
- Bileşik atama işleçlerini tek bir parametreyle (CS9313) bildirin. Sol işlenen, örtük olarak
thiskabul edilir.
Eşitlik İşleçleri
- CS0660: Tür == işlecini veya != işlecini tanımlar ancak Object.Equals(nesne o) öğesini geçersiz kılmaz
- CS0661: Tür == işlecini veya != işlecini tanımlar ancak Object.GetHashCode() öğesini geçersiz kılmaz
Eşitliği doğru uygulamak için, özel eşitlik işleçlerini tanımlarken ilgili Object yöntemleri geçersiz kılın. Daha fazla bilgi için bkz. Tür için değer eşitliğini tanımlama ve Eşitlik işleçleri.
- veya Object.Equals (
operator ==) tanımlarkenoperator !=geçersiz kılın. -
Object.GetHashCode'i geçersiz kılın veya
operator ==veyaoperator !=tanımlarken (CS0661).
Bu yöntemlerin geçersiz kılınması, farklı API'ler ve koleksiyon türleri arasında tutarlı eşitlik davranışı sağlar.