CA2225: İşleç aşırı yüklemeleri adlandırılmış alternatiflere sahiptir
Özellik | Değer |
---|---|
Kural Kimliği | CA2225 |
Başlık | İşleç aşırı yüklemeleri adlandırılmış alternatiflere sahiptir |
Kategori | Kullanım |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 8'de varsayılan olarak etkin | No |
Neden
Bir işleç aşırı yüklemesi algılandı ve beklenen adlandırılmış alternatif yöntem bulunamadı.
Varsayılan olarak, bu kural yalnızca dışarıdan görünen türlere bakar, ancak bu yapılandırılabilir.
Kural açıklaması
İşleç aşırı yüklemesi, bir tür için hesaplamaları temsil eden simgelerin kullanılmasına olanak tanır. Örneğin, toplama için artı simgesini +
aşırı yükleyen bir tür genellikle adlı Add
alternatif bir üyeye sahip olur. Adlandırılmış alternatif üye işleç ile aynı işleve erişim sağlar. Aşırı yüklenmiş işleçleri desteklemeyen dillerde program yapan geliştiriciler için sağlanır.
Bu kural şu işlemleri inceler:
ve adlı
To<typename>
yöntemleri denetleyerek bir türdeki örtük veFrom<typename>
açık atama işleçleri.Aşağıdaki tabloda listelenen işleçler:
C# | Visual Basic | C++ | Alternatif yöntem adı |
---|---|---|---|
+ (ikili) | + | + (ikili) | Ekleme |
+= | += | += | Ekleme |
& | And | & | Bit DüzeyindeVe |
&= | And= | &= | Bit DüzeyindeVe |
| | Veya | | | Bit DüzeyindeVeya |
|= | Or= | |= | Bit DüzeyindeVeya |
-- | Yok | -- | Azaltma |
/ | / | / | Böl |
/= | /= | /= | Böl |
== | = | == | Eşittir |
^ | Xor | ^ | Xor |
^= | Xor= | ^= | Xor |
> | > | > | CompareTo veya Compare |
>= | >= | >= | CompareTo veya Compare |
++ | Yok | ++ | Artış |
!= | <> | != | Eşittir |
<< | << | << | Leftshift |
<<= | <<= | <<= | Leftshift |
< | < | < | CompareTo veya Compare |
<= | <= | <= | CompareTo veya Compare |
&& | Yok | && | MantıksalVe |
|| | Yok | || | LogicalOr |
! | Yok | ! | LogicalNot |
% | Mod | % | Mod veya Kalan |
%= | Yok | %= | Mod |
* (ikili) | * | * | Çarpma |
*= | Yok | *= | Çarpma |
~ | Not | ~ | OnesComplement |
>> | >> | >> | Rightshift |
>>= | Yok | >>= | Rightshift |
- (ikili) | - (ikili) | - (ikili) | Subtract |
-= | Yok | -= | Subtract |
true | Istrue | Yok | IsTrue (Özellik) |
- (birli) | Yok | - | Geçersiz kıl |
+ (birli) | Yok | + | Artı |
yanlış | Isfalse | False | IsTrue (Özellik) |
*YOK, işlecin seçilen dilde aşırı yüklenemeyeceği anlamına gelir.
Dekont
C# dilinde, bir ikili işleç aşırı yüklendiğinde, varsa ilgili atama işleci de örtük olarak aşırı yüklenir.
İhlalleri düzeltme
Bu kuralın ihlalini düzeltmek için işleç için alternatif yöntemi uygulayın. Önerilen alternatif adı kullanarak adlandırın.
Uyarıların ne zaman bastırılması gerekiyor?
Paylaşılan bir kitaplık uyguluyorsanız bu kuraldan bir uyarıyı gizlemeyin. Uygulamalar bu kuraldan gelen bir uyarıyı yoksayabilir.
Uyarıyı gizleme
Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.
#pragma warning disable CA2225
// The code that's violating the rule is on this line.
#pragma warning restore CA2225
Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini none
olarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA2225.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Çözümlemek için kod yapılandırma
Bu kuralın kod tabanınızın hangi bölümlerinde çalıştırılacaklarını yapılandırmak için aşağıdaki seçeneği kullanın.
Bu seçeneği yalnızca bu kural, geçerli olduğu tüm kurallar veya bu kategorideki (Kullanım) tüm kurallar için yapılandırabilirsiniz. Daha fazla bilgi için bkz . Kod kalitesi kuralı yapılandırma seçenekleri.
Belirli API yüzeylerini ekleme
Bu kuralın üzerinde çalıştırılacak kod tabanınızın hangi bölümlerini erişilebilirliklerine göre yapılandırabilirsiniz. Örneğin, kuralın yalnızca genel olmayan API yüzeyinde çalıştırılması gerektiğini belirtmek için projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Örnek
Aşağıdaki örnek, bu kuralı ihlal eden bir yapı tanımlar. Örneği düzeltmek için yapıya genel Add(int x, int y)
bir yöntem ekleyin.
public struct Point
{
private int x, y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
public override string ToString()
{
return String.Format("({0},{1})", x, y);
}
// Violates rule: OperatorOverloadsHaveNamedAlternates.
public static Point operator +(Point a, Point b)
{
return new Point(a.x + b.x, a.y + b.y);
}
public int X { get { return x; } }
public int Y { get { return x; } }
}