X++ statiska klassmedlemmar

Anmärkning

Intressegrupper för communityn har nu flyttat från Yammer till Microsoft Viva Engage. Om du vill gå med i en Viva Engage-community och delta i de senaste diskussionerna fyller du i formuläret Begär åtkomst till Finance and Operations Viva Engage Community och väljer den community som du vill ansluta till.

I den här artikeln beskrivs statiska klassmedlemmar i X++. I allmänhet använder du statiska metoder för följande fall:

  • Metoden behöver inte komma åt medlemsvariabler som deklareras i klassen.
  • Metoden behöver inte anropa några instansmetoder (icke-statiska) i klassen.

Deklarera statiska klassmedlemmar med hjälp av det statiska nyckelordet. Det statiska nyckelordet instruerar systemet att endast skapa en instans av metoden, oavsett antalet instanser av klassen. Använd den här instansen under hela sessionen.

Statiska metoder

I det här avsnittet beskrivs ett scenario där en programvarunyckeltyp används för att förhindra piratkopiering. Varje instans av en programvarunyckel kan ha ett eget unikt värde. Eftersom alla programvarunycklar måste följa reglerna för programvarunyckeldesign är logiken som testar för programvarunyckelns överensstämmelse samma för alla programvarunycklar. Därför bör metoden som innehåller valideringslogik för överensstämmelse vara statisk.

Här är ett exempel på en metod som deklareras med hjälp av det statiska nyckelordet.

public class SoftwareKey
{
    static public boolean validateSoftwareKey(str _softwareKeyString)
    {
        // Your code here.
        return false;
    }
}

I följande exempel behöver du inte konstruera en instans av klassen SoftwareKey innan du anropar en statisk metod för klassen. När du vill anropa metoden static validateSoftwareKey börjar syntaxen med namnet på den klass som innehåller metoden. Ett par kolon (::) ansluter klassnamnet till namnet på den statiska metoden.

boolean yourBool = SoftwareKey::validateSoftwareKey(yourSoftwareKeyString);

Statiska fält

Statiska fält är variabler som du deklarerar med hjälp av det statiska nyckelordet. Konceptuellt gäller de för klassen, inte för instanser av klassen.

Statiska konstruktorer

En statisk konstruktor körs alltid innan några statiska anrop eller instansanrop görs till klassen. Körningen av den statiska konstruktorn är relativ till användarens session. Den statiska konstruktorn använder följande syntax.

static void TypeNew()

Du anropar aldrig uttryckligen den statiska konstruktorn. Kompilatorn genererar kod för att se till att konstruktorn anropas exakt en gång före någon annan metod i klassen. Använd en statisk konstruktor för att initiera statiska data eller utföra en viss åtgärd som bara måste utföras en gång. Du kan inte ange parametrar för den statiska konstruktorn och du måste markera den som statisk.

I följande kodexempel visas hur du skapar en singleton-instans med hjälp av en statisk konstruktor.

public class Singleton
{
    private static Singleton instance;

    private void new()
    {
    }

    static void TypeNew()
    {
        instance = new Singleton();
    }

    public static Singleton Instance()
    {
        return Singleton::instance;
    }
}

Singleton garanterar att klassen bara har en instans. I följande exempel visas hur du instansierar singletonen.

Singleton i = Singleton::Instance();

Statisk metod

Statiska metoder, som även kallas klassmetoder, tillhör en klass och skapas med hjälp av nyckelordet static. Du behöver inte instansiera ett objekt innan du använder statiska metoder. Använd statiska metoder för att arbeta med data som lagras i tabeller. Du kan inte använda medlemsvariabler i en statisk metod. Använd följande syntax för att anropa statiska metoder.

ClassName::methodName();

Statiska metoder och instansmetoder

Nyckelord för accessor på metoder begränsar aldrig anrop mellan två metoder som finns i samma klass, oavsett vilken metod som är statisk eller icke-statisk. I en statisk metod är anrop till den nya konstruktormetoden giltiga även om den nya konstruktormetoden är dekorerad med den privata modifieraren. Syntaxen för dessa anrop kräver att du använder det nya nyckelordet. Koden i en statisk metod måste konstruera ett instansobjekt i sin egen klass innan den kan anropa instansmetoder i klassen.