Heim  >  Artikel  >  Backend-Entwicklung  >  Zusammenstellung von C#-Grundkenntnissen: C#-Klassen und -Strukturen (2)

Zusammenstellung von C#-Grundkenntnissen: C#-Klassen und -Strukturen (2)

黄舟
黄舟Original
2017-02-10 15:23:461250Durchsuche

 1. Was ist ein Konstruktor? Welche Konstrukteure gibt es? Was sind die Definitionen, Implementierungsmethoden und Vorsichtsmaßnahmen der einzelnen Konstruktoren?
Der sogenannte Konstruktor ist eine Methode, die das Objekt initialisieren kann. Das heißt, nach dem Ausführen dieser Funktion wird im Speicher immer ein Platz für Objekte dieser Klasse geöffnet. Es gibt drei Typen: normale Konstruktoren, d. h. Instanziierungskonstruktoren; private statische Konstruktoren.
Instantiierungskonstruktor:

    public class Example
    {
        private string property1 = string.Empty;

        private string property2 = @"hello";

        private int property3 = 0;

        public Example()//成员都是声明时的初始值,这种默认的构造器,也可以不写。
        {

        }

        public Example(string p1, string p2, int p3)//传入的值初始化
        {
            this.property1 = p1;

            this.property2 = p2;

            this.property3 = p3;
        }
    }

Privater Konstruktor:
Der private Konstruktor ist von außen nicht zugänglich. Informationen zur Instanziierung finden Sie im Singleton-Modus. Hier wird privat verwendet. Konstruktor:

http://www.php.cn/

Statischer Konstruktor:
Sehen Sie sich zuerst das Beispiel an:

 public class StaticConstruct
    {
        static StaticConstruct()
        {
            Console.WriteLine(@"静态构造函数");
        }

        public StaticConstruct()
        {
            Console.WriteLine(@"实例化构造函数");
        }

        public StaticConstruct(string flage)
        {
            Console.WriteLine(@"带参构造函数");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            StaticConstruct strc = new StaticConstruct();

            StaticConstruct strcValue = new StaticConstruct(string.Empty);

            Console.ReadLine();
        }
    }

Ergebnis:

Merkmale des statischen Konstruktors: Zugriffsmodifikatoren sind in statischen Konstruktoren nicht zulässig. Beim Instanziieren wird der statische Konstruktor automatisch zuerst aufgerufen. Dies bedeutet, dass der Aufruf des statischen Konstruktors ein unkontrollierbarer Parameter ist und es nur einen in einer Klasse gibt ; es kann nicht vererbt werden.
2. Wofür werden dieses Schlüsselwort und das Basisschlüsselwort verwendet? Code implementieren?
(1), dieses Schlüsselwort:
Dies bezieht sich, wie der Name schon sagt, auf die Bedeutung in dieser Klasse und bezieht sich auf die Mitglieder der aktuellen Klasse. Wenn das Programm ausgeführt wird, kann man natürlich genau sagen, dass es sich auf das Mitglied des Objekts der aktuellen Klasse bezieht und seine Funktion darin besteht, das Objekt zu unterscheiden. Weil eine Klasse N Objekte haben kann. Das Schlüsselwort this kann jedoch nicht in der statischen Klasse verwendet werden, da es für static nicht möglich ist, mehrere Objekte zu instanziieren. Es besteht natürlich keine Notwendigkeit, dies zur Unterscheidung von Objekten zu verwenden. Im Allgemeinen werden folgende verwendet:
a. Variablen mit demselben Namen in Methoden oder Konstruktoren.

     public class MyTestA
    {
        private string testA = string.Empty;

        public MyTestA(string testA)
        {
            this.testA = testA;
        }

        public void Handler(string testA)
        {
            this.testA = testA;
        }
    }

b. Get- und Set-Methoden

    public class MyTestB
    {
        private string testB = string.Empty;

        public string TestB
        {
            get 
            { 
                return this.testB;
            }
            set 
            { 
                this.testB = value;
            }
        }
    }

c. Übergeben Sie die Instanz
Zum Beispiel im Ereignis

    public class MyTestC
    {
        public event EventHandler OnTestCEvent = null;

        private void Send_OntestEvent(object sender,EventArgs e)
        {
            if (OnTestCEvent != null)
            {
                OnTestCEvent(sender, e);
            }
        }

        private void TestEvent()
        {
            Send_OntestEvent(this, null);
        }
    }

    public class MyTestD
    {
        MyTestC testC = new MyTestC();

        public event EventHandler OnTestDEvent = null;

        private void Send_OnTestDEvent(object sender, EventArgs e)
        {
            if (OnTestDEvent != null)
            {
                OnTestDEvent(sender, e);
            }
        }

        public MyTestD()
        {
            testC.OnTestCEvent += new EventHandler(testC_OnTestEvent);
        }

        void testC_OnTestEvent(object sender, EventArgs e)
        {
            Send_OnTestDEvent(sender, e);
        }
    }

    public class MyTestE
    {
        MyTestD testD = new MyTestD();

        public MyTestE()
        {
            this.testD.OnTestDEvent += new EventHandler(testD_OnTestDEvent);
        }

        void testD_OnTestDEvent(object sender, EventArgs e)
        {
            MyTestC testC = sender as MyTestC;//通过MytestD将对象转了过来

            if (testC != null)
            {
                //代码
            }
        }
    }

(2) Basisschlüsselwort:
wird im Allgemeinen für Unterklassen verwendet, um auf übergeordnete Klassen zuzugreifen.
Eine davon ist, dass beim Überschreiben der Methode der übergeordneten Klasse

    public class ParentClass
    {
        public virtual void MethodA()
        {
            Console.WriteLine(@"基类的方法");
        }
    }

    public class ChildClass : ParentClass
    {
        public override void MethodA()
        {
            base.MethodA();

            Console.WriteLine("派生类方法");
        }
    }

Die andere darin besteht, dass die Unterklasse den Konstruktor der übergeordneten Klasse aufruft,

    public class ParentClass
    {
        public ParentClass(string flage)
        {
            Console.WriteLine(@"基类构造函数");
        }

        public virtual void MethodA()
        {
            Console.WriteLine(@"基类的方法");
        }
    }

    public class ChildClass : ParentClass
    {
        public ChildClass(string flage)

            : base(flage)
        {

        }

        public override void MethodA()
        {
            base.MethodA();

            Console.WriteLine("派生类方法");
        }
    }

 3. Was ist Ist es ein Spiegelbild? Wie setzt man Reflexion um? Welche Vor- und Nachteile hat die Reflexion? Wann sollte Reflexion eingesetzt werden?
http://blog.csdn.net/yysyangyangyangshan/article/details/7028589

Das Obige ist das Grundwissen von C#: C#-Klasse und -Struktur (2). Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!

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