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 är statiska metoder avsedda för följande fall:

  • Metoden har ingen anledning att komma åt de medlemsvariabler som deklareras i klassen.
  • Metoden har ingen anledning att anropa några instansmetoder (icke-statiska) i klassen.

Du deklarerar statiska klassmedlemmar med hjälp av det statiska nyckelordet. Det statiska nyckelordet instruerar systemet att bara skapa en instans av metoden, oavsett antalet instanser av klassen som finns. Den här instansen används 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 (::) används för att ansluta klassnamnet till namnet på den statiska metoden.

boolean yourBool = SoftwareKey::validateSoftwareKey(yourSoftwareKeyString);

Statiska fält

Statiska fält är variabler som deklareras 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 kommer garanterat att köras 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 har 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. En statisk konstruktor används för att initiera statiska data eller utföra en viss åtgärd som bara måste utföras en gång. Inga parametrar kan anges för den statiska konstruktorn och den måste markeras 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 endast en instans av klassen någonsin kommer att anropas. I följande exempel visas hur du instansierar singletonen.

Singleton i = Singleton::Instance();

Statiska metoder

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. Statiska metoder används ofta för att arbeta med data som lagras i tabeller. Medlemsvariabler kan inte användas i en statisk metod. Du använder 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 det nya nyckelordet används. Koden i en statisk metod måste konstruera ett instansobjekt i sin egen klass innan den kan anropa instansmetoder i klassen.