Megosztás a következőn keresztül:


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:

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.

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