suchen
HeimBackend-EntwicklungC#.Net-Tutorialc#-Eigenschaften und Indexer

1. Attribute
Die sogenannten Attribute sind eigentlich spezielle Klassenmitglieder, die einen kontrollierten Zugriff auf private Klassenfelder implementieren. Es gibt zwei Attributmethoden in der C#-Sprache: Eine ist get, mit der der Wert des privaten Felds zurückgegeben werden kann, und die zweite ist set, mit der der Wert des privaten Felds festgelegt werden kann. Nehmen Sie beispielsweise den folgenden Code als Beispiel, um ein Studentennamenattribut zu erstellen und den kontrollierten Zugriff auf das Namensfeld zu steuern:

using System;

public class Student
{
    private string name;
    /// <summary>
    /// 定义学生的姓名属性
    /// </summary>
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}


class Program
{
    static void Main(string[] args)
    {
        Student student = new Student();
        student.Name = "Jeff Wong";
        Console.WriteLine(student.Name);
        Console.Read();
    }
}

2. Indexer
Einfach ausgedrückt ist der sogenannte Indexer ein Art von speziellen Eigenschaften, über die Sie Ihre eigene Klasse wie ein Array referenzieren können. Offensichtlich ist diese Funktion besonders nützlich beim Erstellen von Sammlungsklassen, aber in anderen Situationen, beispielsweise bei der Verarbeitung großer Dateien oder der Abstraktion bestimmter begrenzter Ressourcen, ist es natürlich auch sehr nützlich, in einer Klasse ein Array-ähnliches Verhalten zu haben. Im obigen Beispiel gehen wir beispielsweise davon aus, dass es mehrere Schüler in einer Klasse gibt. Der Aufbau des Indexers kann einfach aufgerufen werden:

using System;
using System.Collections.Generic;

public class Student
{
    public List<Student> listStudents = new List<Student>();

    /// <summary>
    /// 构建索引器
    /// </summary>
    /// <param name="i"></param>
    /// <returns></returns>
    public Student this[int i]
    {
        get { return listStudents[i]; }
        set { listStudents[i] = value; }
    }

    private string name;
    /// <summary>
    /// 属性
    /// </summary>
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
    public Student(string name)
    {
        this.name = name;
    }
    public Student()
    {
        this.listStudents.Add(new Student("jeff wong"));
        this.listStudents.Add(new Student("jeffery zhao"));
        this.listStudents.Add(new Student("terry lee"));
        this.listStudents.Add(new Student("dudu"));
    }
}


class Program
{
    static void Main(string[] args)
    {
        Student student = new Student();
        int num = student.listStudents.Count;
        Console.WriteLine("All the students:");
        for (int i = 0; i < num; i++)
        {
            Console.WriteLine(student[i].Name); //通过索引器,取所有学生名
        }

        //设置索引器的值
        student[0].Name = "jeff";
        Console.WriteLine("After modified,all the students:");
        for (int i = 0; i < num; i++)
        {
            Console.WriteLine(student[i].Name); 
        }

        Console.Read();
    }
}

Im obigen Code sehen wir, dass der Zugriffsmechanismus des Indexers verwendet wird Wenn Sie einen Parameter angeben (Parameter ist eine Ganzzahl), können Sie tatsächlich einen Indexer mit mehreren Parametern erstellen. Am Beispiel des obigen Codes möchten wir die Gesamtpunktzahl des Schülers basierend auf seiner Schülernummer und seinem Namen ermitteln. Der geänderte Code lautet wie folgt:

using System;
using System.Collections.Generic;

public class Student
{
    public List<Student> listStudents = new List<Student>();

    public Student this[int i,string name]
    {
        get
        {
            foreach (Student stu in listStudents.ToArray())
            {
                if (stu.sid == i && stu.name == name) //按照学号和姓名取出学生
                {
                    return stu;
                }
            }
            return null;
        }
        set { listStudents[i] = value; }
    }

    private int sid; //学号
    public int Sid
    {
        get { return sid; }
        set { sid = value; }
    }
    private string name;//姓名
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
    private int score; //总分
    public int Score
    {
        get { return score; }
        set { score = value; }
    }
    public Student(int sid, string name, int score)
    {
        this.sid = sid;
        this.name = name;
        this.score = score;
    }
    public Student()
    {
        this.listStudents.Add(new Student(1, "jeff wong", 375));
        this.listStudents.Add(new Student(2,"jeffery zhao",450));
        this.listStudents.Add(new Student(3,"terry lee",400));
        this.listStudents.Add(new Student(4,"dudu",500));
    }
}


class Program
{
    static void Main(string[] args)
    {
        Student student = new Student();
        Student stu = student[1, "jeff wong"];
        Console.WriteLine("student number:" + stu.Sid + ",name:" + stu.Name + ",score:" + stu.Score);

        Console.Read();
    }
}

3 ;1>,

Attributdefinition:

Zugriffsmodifikator-Rückgabetyp-Attributname

get{Anweisungssammlung}
set{Anweisungssammlung}


Definition des Indexers:

Zugriffsmodifikator-Rückgabetyp this[Parametertypparameter...]


get{Anweisungssammlung}
gesetzt {Anweisungssammlungen }

,


Indexer ermöglichen die Indizierung von Objekten auf ähnliche Weise wie Arrays.

Dieses Schlüsselwort wird verwendet, um den Indexer zu definieren.
Accessor-Rückgabewert abrufen. Der Set-Accessor weist einen Wert zu.
Das Schlüsselwort value wird verwendet, um den vom Set-Indexer zugewiesenen Wert zu definieren.
Der Indexer muss nicht auf der Grundlage ganzzahliger Werte indizieren. Es liegt an Ihnen, den spezifischen Suchmechanismus zu definieren.
Indexer können überlastet sein.
Der Hauptunterschied zwischen Attributen und Indexern:
a. Jedes Attribut einer Klasse muss einen eindeutigen Namen haben und jeder in der Klasse definierte Indexer muss eine eindeutige Signatur haben (). damit eine Indexerüberladung implementiert werden kann).
b. Eigenschaften können statisch (statisch) sein und Indexer müssen Instanzmitglieder sein.
, Beispiel für Indexer-Überladung:

using System;
using System.Collections.Generic;

public class Student
{
    public List<Student> listStudents = new List<Student>();

    public Student this[int i,string name]
    {
        get
        {
            foreach (Student stu in listStudents.ToArray())
            {
                if (stu.sid == i && stu.name == name) //按照学号和姓名取出学生
                {
                    return stu;
                }
            }
            return null;
        }
        set { listStudents[i] = value; }
    }

    /// <summary>
    /// 索引器重载
    /// </summary>
    /// <param name="i"></param>
    /// <returns></returns>
    public Student this[int i] //i从0开始
    {
        get { return listStudents[i]; }
        set { listStudents[i] = value; }
    }

    private int sid; //学号
    public int Sid
    {
        get { return sid; }
        set { sid = value; }
    }
    private string name;//姓名
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
    private int score; //总分
    public int Score
    {
        get { return score; }
        set { score = value; }
    }
    public Student(int sid, string name, int score)
    {
        this.sid = sid;
        this.name = name;
        this.score = score;
    }
    public Student()
    {
        this.listStudents.Add(new Student(1, "jeff wong", 375));
        this.listStudents.Add(new Student(2,"jeffery zhao",450));
        this.listStudents.Add(new Student(3,"terry lee",400));
        this.listStudents.Add(new Student(4,"dudu",500));
    }
}


class Program
{
    static void Main(string[] args)
    {
        Student student = new Student();
        Student stu = student[1, "jeff wong"];
        Console.WriteLine("student number:" + stu.Sid + ",name:" + stu.Name + ",score:" + stu.Score);
      
        Console.WriteLine("all the students:");

        for (int i = 0; i < student.listStudents.Count; i++)
        {
            Console.WriteLine("student number:" + student[i].Sid + ",name:" + student[i].Name + ",score:" + student[i].Score);
        }

        Console.Read();
    }
}



Weitere C#-Eigenschaften und Indexer-bezogene Artikel Bitte beachten Sie PHP chinesische Website!


Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
C# und .net: Verständnis der Beziehung zwischen den beidenC# und .net: Verständnis der Beziehung zwischen den beidenApr 17, 2025 am 12:07 AM

Die Beziehung zwischen C# und .NET ist untrennbar miteinander verbunden, aber nicht dasselbe. C# ist eine Programmiersprache, während .NET eine Entwicklungsplattform ist. C# wird verwendet, um Code zu schreiben, in .NETs Intermediate Language (IL) zu kompilieren und von der .NET -Laufzeit (CLR) ausgeführt zu werden.

Die anhaltende Relevanz von C# .NET: Ein Blick auf die aktuelle VerwendungDie anhaltende Relevanz von C# .NET: Ein Blick auf die aktuelle VerwendungApr 16, 2025 am 12:07 AM

C#.NET ist immer noch wichtig, da es leistungsstarke Tools und Bibliotheken bietet, die mehrere Anwendungsentwicklung unterstützen. 1) C# kombiniert .NET Framework, um die Entwicklung effizient und bequem zu machen. 2) Mechanismus zum Typensicherheit und Müllsammlung von C#erhöht die Vorteile. 3) .NET bietet eine plattformübergreifende laufende Umgebung und eine reichhaltige APIs, wodurch die Flexibilität der Entwicklung verbessert wird.

Vom Web zum Desktop: Die Vielseitigkeit von C# .NETVom Web zum Desktop: Die Vielseitigkeit von C# .NETApr 15, 2025 am 12:07 AM

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C# .net und die Zukunft: Anpassung an neue TechnologienC# .net und die Zukunft: Anpassung an neue TechnologienApr 14, 2025 am 12:06 AM

C# und .NET passen sich durch kontinuierliche Aktualisierungen und Optimierungen an die Bedürfnisse neuer Technologien an. 1) C# 9.0 und .NET5 Führen Sie den Datensatztyp und die Leistungsoptimierung ein. 2) .NETCORE verbessert die native und containerische Unterstützung von Cloud. 3) ASP.NetCore integriert sich in moderne Webtechnologien. 4) ML.NET unterstützt maschinelles Lernen und künstliche Intelligenz. 5) Asynchrone Programmierung und Best Practices verbessern die Leistung.

Ist C# .NET das Richtige für Sie? Bewertung seiner AnwendbarkeitIst C# .NET das Richtige für Sie? Bewertung seiner AnwendbarkeitApr 13, 2025 am 12:03 AM

C#.NetissoBableFoREenterPrise-Level Applications-WithemicrosoftCosystemDuetoitsStrongtyPing, Richlibrary, Androbustperformance.

C# Code in .NET: Erforschen des ProgrammiervorgangsC# Code in .NET: Erforschen des ProgrammiervorgangsApr 12, 2025 am 12:02 AM

Der Programmierungsprozess von C# in .NET enthält die folgenden Schritte: 1) Schreiben von C# Code, 2) Kompilieren in eine mittlere Sprache (IL) und 3), die durch die .NET -Laufzeit (CLR) ausführt. Die Vorteile von C# in .NET sind die moderne Syntax, das leistungsstarke Typsystem und die enge Integration in das .NET -Framework, das für verschiedene Entwicklungsszenarien geeignet ist, von Desktop -Anwendungen bis hin zu Webdiensten.

C# .NET: Erforschen von Kernkonzepten und ProgrammierfundamentaldatenC# .NET: Erforschen von Kernkonzepten und ProgrammierfundamentaldatenApr 10, 2025 am 09:32 AM

C# ist eine moderne, objektorientierte Programmiersprache, die von Microsoft und als Teil des .NET-Frameworks entwickelt wurde. 1.C# unterstützt die objektorientierte Programmierung (OOP), einschließlich Einkapselung, Vererbung und Polymorphismus. 2. Asynchrones Programmieren in C# wird über Async implementiert und wartet auf Schlüsselwörter, um die Reaktionsfähigkeit der Anwendungen zu verbessern. 3.. Verwenden Sie LINQ, um Datensammlungen präzise zu verarbeiten. 4. Häufige Fehler umfassen Null-Referenzausnahmen und Indexausnahmen außerhalb des Bereichs. Zu den Debugging -Fähigkeiten gehört die Verwendung eines Debuggers und Ausnahmeberechnung. 5. Leistungsoptimierung umfasst die Verwendung von StringBuilder und das Vermeiden von unnötigem Packung und Unboxing.

Testen von C# .NET-Anwendungen: Einheit, Integration und End-to-End-TestTesten von C# .NET-Anwendungen: Einheit, Integration und End-to-End-TestApr 09, 2025 am 12:04 AM

Die Teststrategien für C#.NET-Anwendungen umfassen Unit-Tests, Integrationstests und End-to-End-Tests. 1. Unit -Test stellt sicher, dass die Mindesteinheit des Codes unter Verwendung des Frameworks MStest, Nunit oder Xunit unabhängig funktioniert. 2. Integrierte Tests überprüfen die Funktionen mehrerer Einheiten kombinierter, häufig verwendeten simulierten Daten und externen Diensten. 3. End-to-End-Tests simuliert den vollständigen Betriebsprozess des Benutzers, und Selen wird normalerweise für automatisierte Tests verwendet.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft