Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C# Indexers: objecten laten gedragen als arrays

Een indexer stelt een object in staat om geïndexeerd te worden zoals een array. Wanneer u een indexer voor een klasse definieert, gedraagt deze klasse zich als een virtuele array. U kunt vervolgens de instantie van deze klasse benaderen met de array-toegangsoperator ([ ]).

Syntaxis

Een eendimensionale indexer heeft de volgende syntaxis:

element-type this[int index] {
    // De get-accessor.
    get {
        // return de waarde gespecificeerd door index
    }
    // De set-accessor.
    set {
        // stel de waarde in gespecificeerd door index
    }
}

Gebruik van indexers

De declaratie van het gedrag van een indexer lijkt op die van een eigenschap. Net als bij eigenschappen gebruikt u get en set accessors voor het definiëren van een indexer. Echter, eigenschappen retourneren of stellen een specifiek gegevenslid in, terwijl indexers een bepaalde waarde uit het objectinstantie retourneren of instellen. Met andere woorden: het splitst de instantiedata in kleinere delen en indexeert elk deel, haalt of stelt elk deel in.

Het definiëren van een eigenschap omvat het opgeven van een eigenschapsnaam. Indexers worden niet met namen gedefinieerd, maar met het this-trefwoord, dat verwijst naar het objectinstantie. Het volgende voorbeeld demonstreert het concept:

Live Demo
using System;

namespace IndexerApplication {
    class IndexedNames {
        private string[] namelist = new string[size];
        static public int size = 10;

        public IndexedNames() {
            for (int i = 0; i < size; i++)
                namelist[i] = "N. A.";
        }

        public string this[int index] {
            get {
                string tmp;
                if (index >= 0 && index <= size - 1) {
                    tmp = namelist[index];
                } else {
                    tmp = "";
                }
                return (tmp);
            }
            set {
                if (index >= 0 && index <= size - 1) {
                    namelist[index] = value;
                }
            }
        }

        static void Main(string[] args) {
            IndexedNames names = new IndexedNames();
            names[0] = "Zara";
            names[1] = "Riz";
            names[2] = "Nuha";
            names[3] = "Asif";
            names[4] = "Davinder";
            names[5] = "Sunil";
            names[6] = "Rubic";

            for (int i = 0; i < IndexedNames.size; i++) {
                Console.WriteLine(names[i]);
            }
            Console.ReadKey();
        }
    }
}

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, produceert het het volgende resultaat:

Zara
Riz
Nuha
Asif
Davinder
Sunil
Rubic
N. A.
N. A.
N. A.

Overbelaste indexers

Indexers kunnen overbelast worden. Indexers kunnen ook gedeclareerd worden met meerdere parameters en elke parameter kan een ander type zijn. Het is niet noodzakelijk dat de indexen integers zijn. C# staat toe dat indexers van andere typen zijn, bijvoorbeeld een string.

Het volgende voorbeeld demonstreert overbelaste indexers:

Live Demo
using System;

namespace IndexerApplication {
    class IndexedNames {
        private string[] namelist = new string[size];
        static public int size = 10;

        public IndexedNames() {
            for (int i = 0; i < size; i++) {
                namelist[i] = "N. A.";
            }
        }

        public string this[int index] {
            get {
                string tmp;
                if (index >= 0 && index <= size - 1) {
                    tmp = namelist[index];
                } else {
                    tmp = "";
                }
                return (tmp);
            }
            set {
                if (index >= 0 && index <= size - 1) {
                    namelist[index] = value;
                }
            }
        }

        public int this[string name] {
            get {
                int index = 0;
                while (index < size) {
                    if (namelist[index] == name) {
                        return index;
                    }
                    index++;
                }
                return index;
            }
        }

        static void Main(string[] args) {
            IndexedNames names = new IndexedNames();
            names[0] = "Zara";
            names[1] = "Riz";
            names[2] = "Nuha";
            names[3] = "Asif";
            names[4] = "Davinder";
            names[5] = "Sunil";
            names[6] = "Rubic";

            // eerste indexer met int-parameter gebruiken
            for (int i = 0; i < IndexedNames.size; i++) {
                Console.WriteLine(names[i]);
            }

            // tweede indexer met string-parameter gebruiken
            Console.WriteLine(names["Nuha"]);
            Console.ReadKey();
        }
    }
}

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, produceert het het volgende resultaat:

Zara
Riz
Nuha
Asif
Davinder
Sunil
Rubic
N. A.
N. A.
N. A.
2

C Taal

  1. C# Hello World – Uw eerste C# applicatie bouwen
  2. C# Keywords en Identifiers begrijpen: Regels, lijsten en best practices
  3. C# Variabelen & Primitive Datatypes onder de knie krijgen: Complete gids
  4. C# Operators – Uitgebreide gids voor operators in C#
  5. C# Bitwise en Bit Shift Operators: Een Uitgebreide Gids
  6. C# Fundamentals: Invoer en Uitvoer Basis
  7. C# Expressies, Statements & Blokken: Uitgebreide Gids met Praktische Voorbeelden
  8. C# Comments Onder de Loep: Types, Best Practices en XML Documentatie
  9. De C# Switch Statement: Syntaxis, Voorbeelden & Best Practices
  10. De C# Ternaire Operator: Beknopte Gids voor Conditionele Expressies
  11. C# Break Statement: Hoe en Wanneer Te Gebruiken