CA2002: Ne zárolja a gyenge identitású objektumokat
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA2002 |
Cím | Ne zárolja a gyenge identitású objektumokat |
Kategória | Megbízhatóság |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 8-ban | Nem |
Ok
Egy szál megpróbál zárolást szerezni egy gyenge identitással rendelkező objektumon.
Szabály leírása
A rendszer azt állítja, hogy egy objektum gyenge identitással rendelkezik, ha közvetlenül elérhető az alkalmazás tartományhatárai között. A gyenge identitással rendelkező objektumok zárolását lekérni próbáló szálakat egy másik alkalmazástartomány második szála blokkolhatja, amely ugyanahhoz az objektumhoz van zárolva.
A következő típusok gyenge identitással rendelkeznek, és a szabály megjelöli:
Értéktípusok tömbjei, beleértve az integráltípusokat, a lebegőpontos típusokat és Booleana .
Szabálysértések kijavítása
A szabály megsértésének kijavításához használjon olyan típusú objektumot, amely nem szerepel a Leírás szakaszban található listában.
Mikor kell letiltani a figyelmeztetéseket?
A figyelmeztetést nyugodtan letilthatja, ha a zárolt objektum this
vagy Me
az önobjektum-típus láthatósága privát vagy belső, és a példány nyilvános hivatkozással nem érhető el.
Ellenkező esetben ne tiltsa le a szabály figyelmeztetését.
Figyelmeztetés mellőzése
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.
#pragma warning disable CA2002
// The code that's violating the rule is on this line.
#pragma warning restore CA2002
Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none
a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_diagnostic.CA2002.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Kapcsolódó szabályok
CA2213: Eldobható mezőket kell megsemmisíteni
Példa
Az alábbi példa néhány objektumzárolást mutat be, amelyek megsértik a szabályt.
Imports System
Imports System.IO
Imports System.Reflection
Imports System.Threading
Namespace ca2002
Class WeakIdentities
Sub SyncLockOnWeakId1()
SyncLock GetType(WeakIdentities)
End SyncLock
End Sub
Sub SyncLockOnWeakId2()
Dim stream As New MemoryStream()
SyncLock stream
End SyncLock
End Sub
Sub SyncLockOnWeakId3()
SyncLock "string"
End SyncLock
End Sub
Sub SyncLockOnWeakId4()
Dim member As MemberInfo =
Me.GetType().GetMember("SyncLockOnWeakId1")(0)
SyncLock member
End SyncLock
End Sub
Sub SyncLockOnWeakId5()
Dim outOfMemory As New OutOfMemoryException()
SyncLock outOfMemory
End SyncLock
End Sub
End Class
End Namespace
class WeakIdentities
{
void LockOnWeakId1()
{
lock (typeof(WeakIdentities)) { }
}
void LockOnWeakId2()
{
MemoryStream stream = new MemoryStream();
lock (stream) { }
}
void LockOnWeakId3()
{
lock ("string") { }
}
void LockOnWeakId4()
{
MemberInfo member = this.GetType().GetMember("LockOnWeakId1")[0];
lock (member) { }
}
void LockOnWeakId5()
{
OutOfMemoryException outOfMemory = new OutOfMemoryException();
lock (outOfMemory) { }
}
}
Kapcsolódó információk
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: