c # grundlegende Grammatik



1. Was ist eine Schnittstelle?

Die Schnittstelle besteht darin, eine Reihe von Funktionselementen anzugeben, ohne deren Referenztypen zu implementieren.
Ich persönlich fühle, dass er eher eine Norm ist.


1.1 Wozu dient die Schnittstelle? Schauen Sie sich das folgende Beispiel an


Klasse a

 class AClass
    {
    
    
        public string Name;
        public int Age;
    }

Typ B.

 class BClass
    {
    
    
        public string First;
        public string Last;
        public double PersonAge;
    }

Programmklasse

 class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            AClass aClass = new AClass()
            {
    
    
                Name = "张三",
                Age = 6,
            };
            PrintInfo(aClass);
        }

        static void PrintInfo(AClass item)
        {
    
    
            Console.WriteLine($"名字是{item.Name},年龄是{item.Age}");
        }
    }

Die Formulierung des Problems ist , dass , wenn Sie wollen Bclass, anstatt zur AclassEingabe persönlicher Daten zu erreichen, ist dieser Ansatz keine Lösung, da Aclassund Bclasssind zwei Klassen. Die Dinge, auf die Sie hinweisen, sind anders.



1.2 Schnittstelle verwenden


1.2.1 Deklarieren Sie die Schnittstelle

 interface IInfo
    {
    
    
        string GetName();
        string GetAge();
    }

1.2.2 Schnittstelle implementieren

  class AInfo : IInfo
    {
    
    
        public string Name {
    
     get; set; }
        public int Aget {
    
     get; set; }
        public string GetAge()
        {
    
    
            return Name;
        }

        public string GetName()
        {
    
    
            return Aget.ToString();
        }
    }
class BInfo : IInfo
    {
    
    
        public string First {
    
     get; set; }
        public string Last {
    
     get; set; }
        public double PersonAge {
    
     get; set; }
        public string GetAge()
        {
    
    
            return PersonAge.ToString();
        }

        public string GetName()
        {
    
    
            return First + Last;
        }
    }

1.2.3 Hauptfunktion aufrufen

 class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            AInfo aInfo = new AInfo() {
    
     Name = "John", Aget = 35 };
            BInfo bInfo = new BInfo() {
    
     First = "dehua", Last = "liu", PersonAge = 33.6 };
            PrintInfo(aInfo);
            PrintInfo(bInfo);
        }
        static void PrintInfo(IInfo item)
        {
    
    
            Console.WriteLine($"名字{item.GetName()},年龄是{item.GetAge()}");
        }
    }

Hinweis: An den oben genannten Stellen übergeben wir die Schnittstelle, nicht die Klasse, die eine Schnittstelle implementiert.





2. Schnittstellendeklaration


2.1 Vorsichtsmaßnahmen für die Deklaration der Schnittstelle

  • Die Schnittstelle kann nur nicht statische Elementfunktionen (Methoden, Eigenschaften, Ereignisse, Indexer) enthalten.
  • Diese Funktionselemente dürfen keinen Implementierungscode enthalten, und nach dem Text muss ein Semikolon verwendet werden
  • Laut Management, der Anweisungsschnittstelle, müssen Sie den IAnfang in Großbuchstaben verwenden
  • Schnittstellendeklarationen können beliebige Modifikatoren enthalten. Zum Beispiel public protected internal private. Die Mitglieder der Schnittstelle sind jedoch implizit publicund können keine Modifikatoren annehmen, einschließlichpublic
public interface IInfo
    {
    
    
        string GetName();
        string GetAge();
    }

2.2 Vorsichtsmaßnahmen zur Implementierung der Schnittstelle

  • Wenn die Klasse die Schnittstelle implementiert, muss sie alle Mitglieder der Schnittstelle implementieren
  • Wenn die Schnittstelle von der Basisklasse erbt und die Schnittstelle implementiert, muss sie vor allen Ports platziert werden. Durch Kommas trennen.


2.3 Schnittstelle und als Operator

Die Schnittstelle ist ein Referenztyp, der eine erzwungene Typkonvertierung implementieren kann (dh seinen Sohn verwenden, um sich als sein Vater auszugeben). wie folgt:

  static void Main(string[] args)
        {
    
    
            AInfo aInfo = new AInfo() {
    
     Name = "John", Aget = 35 };
            IInfo info = (IInfo)aInfo;
            PrintInfo(info);
        }

Wenn zu diesem Zeitpunkt in diesem Prozess die Klasse die Schnittstelle nicht implementiert, sollte der Ausdruck eine Ausnahme auslösen. Dieses Mal können Sie asOperatoren verwenden, um dieses Problem zu vermeiden Geschwindigkeit des Codes, und versetzen Sie das Programm in einen inkonsistenten Zustand)

static void Main(string[] args)
        {
    
    
            AInfo aInfo = new AInfo() {
    
     Name = "John", Aget = 35 };
            IInfo info = aInfo as IInfo;
            if (info != null)
            {
    
    
                PrintInfo(info);
            }
         }


2.4 Implementieren Sie eine Schnittstelle mit doppelten Mitgliedern

Wenn eine Klasse mehrere Schnittstellen implementiert und einige der Schnittstellen Mitglieder mit derselben Signatur und demselben Rückgabetyp haben, kann die Klasse ein einzelnes Mitglied implementieren, um alle Schnittstellen zu erfüllen, die doppelte Mitglieder enthalten.

2.5 Abgeleitete Mitglieder als Implementierung

Wenn die abgeleitete Klasse die Mitglieder der Basisklasse implementieren kann, kann die Basisklasse auch dann die Anforderungen zum Implementieren von Schnittstellenmethoden erfüllen, wenn die Klasse leer ist

interface IIfc1 {
    
     void PrintOut(string s);}
interface IIfc1 {
    
     void PrintOut(string s); }

class AClass
    {
    
    
        public void PrintOut(string s)
        {
    
    
            Console.WriteLine("s");
        }
    }
    
class BClass : AClass, IIfc1
    {
    
      
    // 这里面是空的,也没事
    }



2.6 Explizite Implementierung von Schnittstellenmitgliedern

Wenn eine einzelne Klasse Mitglieder implementieren kann, müssen mehrere Schnittstellen implementiert werden. Wenn wir alle paar Bissen Trennung erreichen möchten, sollte dies verwendet werden , um die Implementierung der Elementfunktion anzuzeigen .

Erklärung

interface IIfc1
    {
    
    
        void PrintOut(string s);
    }
    
interface IIfc2
    {
    
    
        void PrintOut(string s);
    }
    class MyClass : IIfc1, IIfc2
    {
    
    
        void IIfc1.PrintOut(string s)
        {
    
    
            Console.WriteLine($"IIf1 输出 {s}");
        }

        void IIfc2.PrintOut(string s)
        {
    
    
            Console.WriteLine($"IIf2 输出 {s}");
        }
    }

Transfer:

static void Main(string[] args)
        {
    
    
            MyClass mc = new MyClass();
            IIfc1 ifc1 = mc as IIfc1;
            ifc1.PrintOut("你好");
        }

Ich denke du magst

Origin blog.csdn.net/zhaozhao236/article/details/110853621
Empfohlen
Rangfolge