top 50 c interview questions with answers
Häufig gestellte grundlegende C # -Interview-Fragen zur Programmierung und Codierung:
C # ist eine Programmiersprache, die schnell gewachsen ist und auch weit verbreitet ist. Es ist sehr gefragt, vielseitig und unterstützt auch plattformübergreifende Maßnahmen.
Es wird nicht nur für Windows, sondern auch für viele andere Betriebssysteme verwendet. Daher ist es sehr wichtig, ein gutes Verständnis dieser Sprache zu haben, um in jedem Job in der Software-Testbranche zu landen.
Im Folgenden sind nicht nur einige der am häufigsten gestellten Fragen zu C # aufgeführt, sondern auch einige sehr wichtige Themen, die verstanden werden müssen, um sich von der Masse der C # -Population abzuheben.
Da C # ein umfangreiches Thema ist, habe ich dieses Thema zur Vereinfachung der Behandlung aller Konzepte in drei Teile unterteilt:
- Fragen zu Grundkonzepten
- Fragen zu Arrays und Strings
- Erweiterte Konzepte
Dieser Artikel enthält eine Reihe von Top 50 C # -Interview-Fragen und -Antworten, die in einfachen Worten fast alle wichtigen Themen abdecken, um Sie bei der Vorbereitung auf Ihr Interview zu unterstützen.
Was du lernen wirst:
Die beliebtesten Fragen und Antworten zum C # -Interview
Grundlegendes Konzept
F # 1) Was ist ein Objekt und eine Klasse?
Antworten: Klasse ist eine Kapselung von Eigenschaften und Methoden, die zur Darstellung einer Echtzeitentität verwendet werden. Es ist eine Datenstruktur, die alle Instanzen in einer Einheit zusammenführt.
Objekt ist als Instanz einer Klasse definiert. Technisch gesehen ist es nur ein Speicherblock, der in Form von Variablen, Arrays oder einer Sammlung gespeichert werden kann.
F # 2) Was sind die grundlegenden OOP-Konzepte?
Antwort: Die vier Grundkonzepte der objektorientierten Programmierung sind:
- Verkapselung : Hier ist die interne Darstellung eines Objekts außerhalb der Objektdefinition verborgen. Es kann nur auf die erforderlichen Informationen zugegriffen werden, während der Rest der Datenimplementierung ausgeblendet ist.
- Abstraktion: Es ist ein Prozess, bei dem das kritische Verhalten und die Daten eines Objekts identifiziert und irrelevante Details beseitigt werden.
- Erbe : Es ist die Fähigkeit, neue Klassen aus einer anderen Klasse zu erstellen. Dies erfolgt durch Zugreifen auf, Ändern und Erweitern des Verhaltens von Objekten in der übergeordneten Klasse.
- Polymorphismus : Der Name bedeutet, ein Name, viele Formen. Dies wird erreicht, indem mehrere Methoden mit demselben Namen, aber unterschiedlichen Implementierungen vorhanden sind.
F # 3) Was ist verwalteter und nicht verwalteter Code?
Antworten: Verwalteter Code ist ein Code, der von CLR (Common Language Runtime) ausgeführt wird, d. H. Der gesamte Anwendungscode basiert auf der .NET-Plattform. Es wird aufgrund des .Net-Frameworks als verwaltet betrachtet, das intern den Garbage Collector verwendet, um den nicht verwendeten Speicher zu löschen.
Nicht verwalteter Code ist jeder Code, der von der Anwendungslaufzeit eines anderen Frameworks außer .Net ausgeführt wird. Die Anwendungslaufzeit kümmert sich um Speicher, Sicherheit und andere Leistungsvorgänge.
F # 4) Was ist eine Schnittstelle?
Antworten: Interface ist eine Klasse ohne Implementierung. Das einzige, was es enthält, ist die Deklaration von Methoden, Eigenschaften und Ereignissen.
F # 5) Was sind die verschiedenen Arten von Klassen in C #?
Antwort: Die verschiedenen Klassentypen in C # sind:
- Teilklasse: Es ermöglicht die Aufteilung oder Freigabe seiner Mitglieder für mehrere CS-Dateien. Es wird mit dem Schlüsselwort bezeichnet Teilweise.
- Versiegelte Klasse: Es ist eine Klasse, die nicht vererbt werden kann. Um auf die Mitglieder einer versiegelten Klasse zugreifen zu können, müssen wir das Objekt der Klasse erstellen. Es wird mit dem Schlüsselwort bezeichnet Versiegelt .
- Abstrakte Klasse : Es ist eine Klasse, deren Objekt nicht instanziiert werden kann. Die Klasse kann nur vererbt werden. Es sollte mindestens eine Methode enthalten. Es wird mit dem Schlüsselwort bezeichnet abstrakt .
- Statische Klasse : Es ist eine Klasse, die keine Vererbung zulässt. Die Mitglieder der Klasse sind ebenfalls statisch. Es wird mit dem Schlüsselwort bezeichnet statisch . Dieses Schlüsselwort weist den Compiler an, nach versehentlichen Instanzen der statischen Klasse zu suchen.
F # 6) Erläutern Sie die Codekompilierung in C #.
Antwort: Die Codekompilierung in C # umfasst die folgenden vier Schritte:
- Kompilieren des Quellcodes in verwalteten Code durch den C # -Compiler.
- Kombinieren des neu erstellten Codes zu Assemblys.
- Laden der Common Language Runtime (CLR).
- Ausführen der Assembly durch CLR.
Q # 7) Was sind die Unterschiede zwischen einer Klasse und einer Struktur?
Antwort: Nachfolgend sind die Unterschiede zwischen einer Klasse und einer Struktur aufgeführt:
Klasse | Struct |
---|---|
Unterstützt die Vererbung | Unterstützt keine Vererbung |
Klasse ist Referenzübergabe (Referenztyp) | Struct is Pass by Copy (Werttyp) |
Mitglieder sind standardmäßig privat | Mitglieder sind standardmäßig öffentlich |
Gut für größere komplexe Objekte | Gut für kleine isolierte Modelle |
Kann Abfallsammler für die Speicherverwaltung verwenden | Garbage Collector kann nicht verwendet werden und daher keine Speicherverwaltung |
F # 8) Was ist der Unterschied zwischen der virtuellen Methode und der abstrakten Methode?
Antworten: Die virtuelle Methode muss immer eine Standardimplementierung haben. Es kann jedoch in der abgeleiteten Klasse überschrieben werden, obwohl es nicht obligatorisch ist. Es kann mit dem überschrieben werden überschreiben Stichwort.
Eine abstrakte Methode hat keine Implementierung. Es befindet sich in der abstrakten Klasse. Die abgeleitete Klasse muss die abstrakte Methode implementieren. Ein überschreiben Schlüsselwort ist hier nicht erforderlich, obwohl es verwendet werden kann.
F # 9) Erklären Sie Namespaces in C #.
Antworten: Sie werden verwendet, um große Codeprojekte zu organisieren. 'System' ist der am häufigsten verwendete Namespace in C #. Wir können unseren eigenen Namespace erstellen und auch einen Namespace in einem anderen verwenden, der als verschachtelte Namespaces bezeichnet wird.
Sie werden mit dem Schlüsselwort 'Namespace' bezeichnet.
F # 10) Was ist die Anweisung 'using' in C #?
Antworten: Das Schlüsselwort 'Using' gibt an, dass der bestimmte Namespace vom Programm verwendet wird.
Zum Beispiel, mit System
Hier, System ist ein Namespace. Die Klasse Console ist unter System definiert. Wir können also die console.writeline ('...') oder readline in unserem Programm verwenden.
F # 11) Erklären Sie die Abstraktion.
Antworten: Abstraktion ist eines der OOP-Konzepte. Es wird verwendet, um nur die wesentlichen Merkmale der Klasse anzuzeigen und unnötige Informationen auszublenden.
Nehmen wir ein Beispiel für ein Auto:
Ein Fahrer des Autos sollte die Details des Autos wie Farbe, Name, Spiegel, Lenkung, Gang, Bremse usw. kennen. Was er nicht wissen muss, ist ein interner Motor, eine Abgasanlage.
Abstraktion hilft also dabei, zu wissen, was notwendig ist, und die internen Details vor der Außenwelt zu verbergen. Das Ausblenden der internen Informationen kann erreicht werden, indem Parameter wie Privat mit dem deklariert werden Privat Stichwort.
F # 12) Polymorphismus erklären?
Antworten: Programmatisch bedeutet Polymorphismus dieselbe Methode, aber unterschiedliche Implementierungen. Es gibt zwei Arten: Kompilierungszeit und Laufzeit.
- Polymorphismus zur Kompilierungszeit wird durch Überlastung des Bedieners erreicht.
- Laufzeitpolymorphismus wird durch Überschreiben erreicht. Vererbungs- und virtuelle Funktionen werden während des Laufzeitpolymorphismus verwendet.
Zum Beispiel ,Wenn eine Klasse eine Methode Void Add () hat, wird Polymorphismus durch Überladen der Methode erreicht, dh void Add (int a, int b), void Add (int add) sind alle überladenen Methoden.
F # 13) Wie wird die Ausnahmebehandlung in C # implementiert?
Antwort: Die Ausnahmebehandlung erfolgt mit vier Schlüsselwörtern in C #:
- Versuchen : Enthält einen Codeblock, für den eine Ausnahme überprüft wird.
- Fang : Es ist ein Programm, das eine Ausnahme mit Hilfe des Ausnahmebehandlers abfängt.
- endlich : Es ist ein Codeblock, der zur Ausführung geschrieben wird, unabhängig davon, ob eine Ausnahme abgefangen wird oder nicht.
- Werfen : Löst eine Ausnahme aus, wenn ein Problem auftritt.
F # 14) Was sind C # -E / A-Klassen? Was sind die häufig verwendeten E / A-Klassen?
Antworten: C # verfügt über einen System.IO-Namespace, der aus Klassen besteht, mit denen verschiedene Vorgänge für Dateien ausgeführt werden, z. B. Erstellen, Löschen, Öffnen, Schließen usw.
Einige häufig verwendete E / A-Klassen sind:
- Datei - Hilft bei der Bearbeitung einer Datei.
- StreamWriter - Wird zum Schreiben von Zeichen in einen Stream verwendet.
- StreamReader - Wird zum Lesen von Zeichen in einem Stream verwendet.
- StringWriter - Wird zum Lesen eines Zeichenfolgenpuffers verwendet.
- StringReader - Wird zum Schreiben eines Zeichenfolgenpuffers verwendet.
- Pfad - Wird zum Ausführen von Operationen verwendet, die sich auf die Pfadinformationen beziehen.
Q # 15) Was ist die StreamReader / StreamWriter-Klasse?
Antworten: StreamReader und StreamWriter sind Klassen des Namespace System.IO. Sie werden verwendet, wenn wir charder90- bzw. Reader-basierte Daten lesen oder schreiben möchten.
Einige der Mitglieder von StreamReader sind: Close (), Read (), Readline ().
Mitglieder von StreamWriter sind: Close (), Write (), Writeline ().
Class Program1 { using(StreamReader sr = new StreamReader(“C:ReadMe.txt”) { //----------------code to read-------------------// } using(StreamWriter sw = new StreamWriter(“C:ReadMe.txt”)) { //-------------code to write-------------------// } }
F # 16) Was ist ein Destruktor in C #?
Antworten: Der Destruktor wird verwendet, um den Speicher zu bereinigen und die Ressourcen freizugeben. In C # wird dies jedoch vom Garbage Collector selbst durchgeführt. System.GC.Collect () wird intern zum Bereinigen aufgerufen. Manchmal kann es jedoch erforderlich sein, Destruktoren manuell zu implementieren.
Zum Beispiel:
~Car() { Console.writeline(“….”); }
F # 17) Was ist eine abstrakte Klasse?
Antworten: Eine abstrakte Klasse ist eine Klasse, die mit einem abstrakten Schlüsselwort gekennzeichnet ist und nur als Basisklasse verwendet werden kann. Diese Klasse sollte immer geerbt werden. Eine Instanz der Klasse selbst kann nicht erstellt werden. Wenn kein Programm ein Objekt einer Klasse erstellen soll, können solche Klassen abstrakt gemacht werden.
Jede Methode in der abstrakten Klasse verfügt nicht über Implementierungen in derselben Klasse. Sie müssen jedoch in der untergeordneten Klasse implementiert werden.
Zum Beispiel:
abstract class AB1 { Public void Add(); } Class childClass : AB1 { childClass cs = new childClass (); int Sum = cs.Add(); }
Alle Methoden in einer abstrakten Klasse sind implizit virtuelle Methoden. Daher sollte das virtuelle Schlüsselwort nicht mit Methoden in der abstrakten Klasse verwendet werden.
F # 18) Was sind Boxen und Unboxen?
Antworten: Das Konvertieren eines Werttyps in einen Referenztyp wird als Boxing bezeichnet.
Zum Beispiel:
int Wert1 - = 10;
//----Boxen------//
Objekt boxedValue = Wert1;
Die explizite Konvertierung desselben Referenztyps (erstellt durch Boxen) zurück in den Werttyp wird aufgerufen Unboxing .
Zum Beispiel:
// ———— UnBoxing —————— //
int UnBoxing = int (boxedValue);
bestes Programm zur Überwachung der CPU-Temperatur
F # 19) Was ist der Unterschied zwischen Continue und Break Statement?
Antworten: Die Break-Anweisung unterbricht die Schleife. Es steuert das Programm, um die Schleife zu verlassen. Mit der Continue-Anweisung steuert das Programm so, dass nur die aktuelle Iteration beendet wird. Es unterbricht die Schleife nicht.
F # 20) Was ist der Unterschied zwischen dem endgültigen und dem endgültigen Block?
Antworten: endlich Der Block wird nach der Ausführung des Try-and-Catch-Blocks aufgerufen. Es wird zur Ausnahmebehandlung verwendet. Unabhängig davon, ob eine Ausnahme abgefangen wird oder nicht, wird dieser Codeblock ausgeführt. Normalerweise enthält dieser Block einen Bereinigungscode.
Die Methode finalize wird unmittelbar vor der Speicherbereinigung aufgerufen. Es wird verwendet, um Bereinigungsvorgänge für nicht verwalteten Code durchzuführen. Es wird automatisch aufgerufen, wenn eine bestimmte Instanz nicht anschließend aufgerufen wird.
Arrays und Strings
F # 21) Was ist ein Array? Geben Sie die Syntax für ein ein- und mehrdimensionales Array an?
Antworten: In einem Array werden mehrere Variablen desselben Typs gespeichert. Es ist eine Sammlung von Variablen, die an einem zusammenhängenden Speicherort gespeichert sind.
Zum Beispiel:
doppelte Zahlen = neues doppeltes (10);
int () score = new int (4) {25,24,23,25};
Ein eindimensionales Array ist ein lineares Array, in dem die Variablen in einer einzelnen Zeile gespeichert sind. Über Beispiel ist ein eindimensionales Array.
Arrays können mehr als eine Dimension haben. Mehrdimensionale Arrays werden auch als rechteckige Arrays bezeichnet.
Zum Beispiel , int (,) numbers = new int (3,2) {{1,2}, {2,3}, {3,4}};
F # 22) Was ist ein gezacktes Array?
Antworten: Ein gezacktes Array ist ein Array, dessen Elemente Arrays sind. Es wird auch als Array von Arrays bezeichnet. Es kann entweder eine einzelne oder mehrere Dimensionen sein.
int () jaggedArray = new int (4) ();
F # 23) Nennen Sie einige Eigenschaften des Arrays.
Antwort: Zu den Eigenschaften eines Arrays gehören:
- Länge: Ruft die Gesamtzahl der Elemente in einem Array ab.
- IsFixedSize: Gibt an, ob die Größe des Arrays festgelegt ist oder nicht.
- IsReadOnly : Gibt an, ob das Array schreibgeschützt ist oder nicht.
F # 24) Was ist eine Array-Klasse?
Antworten: Eine Array-Klasse ist die Basisklasse für alle Arrays. Es bietet viele Eigenschaften und Methoden. Es ist im Namespace-System vorhanden.
F # 25) Was ist ein String? Was sind die Eigenschaften einer String-Klasse?
Antworten: Ein String ist eine Sammlung von Zeichenobjekten. Wir können auch String-Variablen in c # deklarieren.
string name = 'C # Fragen';
Eine Zeichenfolgenklasse in C # repräsentiert eine Zeichenfolge. Die Eigenschaften der Zeichenfolgenklasse sind:
- Zeichen Holen Sie sich das Char-Objekt in der aktuellen Zeichenfolge.
- Länge Ruft die Anzahl der Objekte in der aktuellen Zeichenfolge ab.
F # 26) Was ist eine Escape-Sequenz? Nennen Sie einige String-Escape-Sequenzen in C #.
Antworten: Eine Escape-Sequenz wird durch einen Backslash () gekennzeichnet. Der Backslash gibt an, dass das darauf folgende Zeichen wörtlich interpretiert werden sollte oder es sich um ein Sonderzeichen handelt. Eine Escape-Sequenz wird als einzelnes Zeichen betrachtet.
String-Escape-Sequenzen lauten wie folgt:
- n - Zeilenumbruch
- b - Rücktaste
- \ - Backslash
- ’- Einfaches Anführungszeichen
- ’’ - Doppelte Anführungszeichen
F # 27) Was sind reguläre Ausdrücke? Suchen Sie eine Zeichenfolge mit regulären Ausdrücken?
Antworten: Regulärer Ausdruck ist eine Vorlage, die mit einer Reihe von Eingaben übereinstimmt. Das Muster kann aus Operatoren, Konstrukten oder Zeichenliteralen bestehen. Regex wird zum Parsen und Ersetzen der Zeichenfolge verwendet.
Zum Beispiel:
* entspricht dem vorhergehenden Zeichen null oder mehrmals. A * b Regex entspricht also b, ab, aab, aaab und so weiter.
Suchen einer Zeichenfolge mit Regex:
static void Main(string() args) { string() languages = { 'C#', 'Python', 'Java' }; foreach(string s in languages) { if(System.Text.RegularExpressions.Regex.IsMatch(s,'Python')) { Console.WriteLine('Match found'); } } }
Im obigen Beispiel wird nach 'Python' für die Eingaben aus dem Spracharray gesucht. Es verwendet Regex.IsMatch, das true zurückgibt, falls das Muster in der Eingabe gefunden wird. Das Muster kann ein beliebiger regulärer Ausdruck sein, der die Eingabe darstellt, mit der wir übereinstimmen möchten.
F # 28) Was sind die grundlegenden String-Operationen? Erklären.
Antwort: Einige der grundlegenden Zeichenfolgenoperationen sind:
- Verketten : Zwei Zeichenfolgen können entweder mit einem System.String.Concat oder mit dem Operator + verkettet werden.
- Ändern : Ersetzen (a, b) wird verwendet, um eine Zeichenfolge durch eine andere Zeichenfolge zu ersetzen. Trim () wird verwendet, um die Zeichenfolge am Ende oder am Anfang zu trimmen.
- Vergleichen Sie : System.StringComparison () wird verwendet, um zwei Zeichenfolgen zu vergleichen, entweder zwischen Groß- und Kleinschreibung oder nicht zwischen Groß- und Kleinschreibung. Es werden hauptsächlich zwei Parameter verwendet, die ursprüngliche Zeichenfolge und die Zeichenfolge, mit denen verglichen werden soll.
- Suche : StartWith- und EndsWith-Methoden werden zum Suchen einer bestimmten Zeichenfolge verwendet.
F # 29) Was ist Parsen? Wie analysiere ich eine Datums- / Uhrzeitzeichenfolge?
Antworten: Beim Parsen wird eine Zeichenfolge in einen anderen Datentyp konvertiert.
Zum Beispiel:
Zeichenfolgentext = '500';
int num = int.Parse (Text);
500 ist eine ganze Zahl. Die Parse-Methode konvertiert also die Zeichenfolge 500 in ihren eigenen Basistyp, d. H. Int.
Gehen Sie genauso vor, um eine DateTime-Zeichenfolge zu konvertieren.
Zeichenfolge dateTime = '1. Januar 2018';
DateTime parsedValue = DateTime.Parse (dateTime);
Erweiterte Konzepte
F # 30) Was ist ein Delegierter? Erklären.
Antworten: Ein Delegat ist eine Variable, die den Verweis auf eine Methode enthält. Daher ist es ein Funktionszeiger oder Referenztyp. Alle Delegaten werden vom System.Delegate-Namespace abgeleitet. Sowohl Delegate als auch die Methode, auf die es verweist, können dieselbe Signatur haben.
- Delegierten erklären: öffentlicher Delegat void AddNumbers (int n);
Nach der Deklaration eines Delegaten muss das Objekt vom Delegaten mit dem neuen Schlüsselwort erstellt werden.
AddNumbers an1 = neue AddNumbers (Nummer);
Der Delegat stellt eine Art Kapselung für die Referenzmethode bereit, die intern aufgerufen wird, wenn ein Delegat aufgerufen wird.
public delegate int myDel(int number); public class Program { public int AddNumbers(int a) { int Sum = a + 10; return Sum; } public void Start() { myDel DelgateExample = AddNumbers; } }
Im obigen Beispiel haben wir einen Delegaten myDel, der einen ganzzahligen Wert als Parameter verwendet. Das Klassenprogramm verfügt über eine Methode mit derselben Signatur wie der Delegat namens AddNumbers ().
Wenn es eine andere Methode namens Start () gibt, die ein Objekt des Delegaten erstellt, kann das Objekt AddNumbers zugewiesen werden, da es dieselbe Signatur wie das des Delegaten hat.
F # 31) Was sind Ereignisse?
Antworten: Ereignisse sind Benutzeraktionen, die Benachrichtigungen an die Anwendung generieren, auf die sie reagieren muss. Die Benutzeraktionen können Mausbewegungen, Tastendruck usw. sein.
Programmatisch wird eine Klasse, die ein Ereignis auslöst, als Herausgeber bezeichnet, und eine Klasse, die auf das Ereignis reagiert / es empfängt, wird als Abonnent bezeichnet. Das Ereignis sollte mindestens einen Abonnenten haben, ansonsten wird das Ereignis niemals ausgelöst.
Delegaten werden verwendet, um Ereignisse zu deklarieren.
Öffentlicher Delegierter void PrintNumbers ();
Ereignis PrintNumbers myEvent;
F # 32) Wie verwende ich Delegaten mit Ereignissen?
Antworten: Delegierte werden verwendet, um Ereignisse auszulösen und zu behandeln. Es muss immer zuerst ein Delegat deklariert werden, und dann werden die Ereignisse deklariert.
Sehen wir uns ein Beispiel an:
Betrachten Sie eine Klasse namens Patient. Betrachten Sie zwei weitere Klassen, Versicherung und Bank, für die Todesinformationen des Patienten aus der Patientenklasse erforderlich sind. Hier sind Versicherung und Bank die Abonnenten und die Patientenklasse wird zum Herausgeber. Es löst das Todesereignis aus und die beiden anderen Klassen sollten das Ereignis erhalten.
namespace ConsoleApp2 { public class Patient { public delegate void deathInfo();//Declaring a Delegate// public event deathInfo deathDate;//Declaring the event// public void Death() { deathDate(); } } public class Insurance { Patient myPat = new Patient(); void GetDeathDetails() { //-------Do Something with the deathDate event------------// } void Main() { //--------Subscribe the function GetDeathDetails----------// myPat.deathDate += GetDeathDetails; } } public class Bank { Patient myPat = new Patient(); void GetPatInfo () { //-------Do Something with the deathDate event------------// } void Main() { //--------Subscribe the function GetPatInfo ----------// myPat.deathDate += GetPatInfo; } } }
Q # 33) Was sind die verschiedenen Arten von Delegierten?
Antwort: Verschiedene Arten von Delegierten sind:
- Einzelner Delegierter : Ein Delegat, der eine einzelne Methode aufrufen kann.
- Multicast-Delegierter : Ein Delegat, der mehrere Methoden aufrufen kann. Die Operatoren + und - werden zum Abonnieren bzw. Abbestellen verwendet.
- Generischer Delegat : Es muss keine Instanz des Delegaten definiert werden. Es gibt drei Arten: Aktion, Funktionen und Prädikat.
- Aktion - Im obigen Beispiel für Delegaten und Ereignisse können wir die Definition von Delegaten und Ereignissen durch das Schlüsselwort Aktion ersetzen. Der Aktionsdelegierte definiert eine Methode, die für Argumente aufgerufen werden kann, aber kein Ergebnis zurückgibt
Öffentlicher Delegierter void deathInfo ();
Öffentliche Veranstaltung DeathInfo DeathDate;
// Durch Aktion ersetzen //
Öffentliche Veranstaltung Aktion DeathDate;
Aktion bezieht sich implizit auf einen Delegaten.
-
- Funktionen - Ein Func-Delegat definiert eine Methode, die für Argumente aufgerufen werden kann, und gibt ein Ergebnis zurück.
Func myDel ist das gleiche wie delegiere bool myDel (int a, string b);
-
- Prädikat - Definiert eine Methode, die für Argumente aufgerufen werden kann und immer den Bool zurückgibt.
Prädikat myDel ist das gleiche wie delegiere bool myDel (string s);
Q # 34) Was bedeuten Multicast-Delegierte?
Antworten: Ein Delegat, der auf mehr als eine Methode verweist, wird als Multicast-Delegat bezeichnet. Multicasting wird mit den Operatoren + und + = erreicht.
Betrachten Sie das Beispiel aus Q # 32.
Es gibt zwei Abonnenten für DeathEvent, GetPatInfo , und GetDeathDetails . Und daher haben wir den Operator + = verwendet. Es bedeutet, wann immer die myDel aufgerufen wird, werden beide Teilnehmer angerufen. Die Delegierten werden in der Reihenfolge angerufen, in der sie hinzugefügt werden.
F # 35) Erklären Sie Publisher und Abonnenten in Events.
Antworten: Publisher ist eine Klasse, die für das Veröffentlichen einer Nachricht verschiedener Arten anderer Klassen verantwortlich ist. Die Nachricht ist nichts anderes als ein Ereignis, wie in den obigen Fragen beschrieben.
Von dem Beispiel In Q # 32 ist Class Patient die Publisher-Klasse. Es wird ein Ereignis generiert Todesereignis , die von den anderen Klassen empfangen wird.
Abonnenten erfassen die Nachricht des Typs, an dem sie interessiert sind Beispiel von Q # 32 sind Class Insurance und Bank Abonnenten. Sie interessieren sich für die Veranstaltung Todesereignis vom Typ Leere .
F # 36) Was sind synchrone und asynchrone Operationen?
Antworten: Die Synchronisierung ist eine Möglichkeit, einen thread-sicheren Code zu erstellen, bei dem jeweils nur ein Thread auf die Ressource zugreifen kann. Der asynchrone Aufruf wartet, bis die Methode abgeschlossen ist, bevor der Programmablauf fortgesetzt wird.
Die synchrone Programmierung wirkt sich stark auf die Benutzeroberflächenoperationen aus, wenn der Benutzer versucht, zeitaufwändige Operationen auszuführen, da nur ein Thread verwendet wird. Bei einer asynchronen Operation wird der Methodenaufruf sofort zurückgegeben, sodass das Programm andere Operationen ausführen kann, während die aufgerufene Methode in bestimmten Situationen ihre Arbeit beendet.
In C # werden die Schlüsselwörter Async und Await verwendet, um eine asynchrone Programmierung zu erreichen. Weitere Informationen zur synchronen Programmierung finden Sie in Q # 43.
F # 37) Was ist Reflexion in C #?
Antworten: Reflexion ist die Fähigkeit eines Codes, zur Laufzeit auf die Metadaten der Assembly zuzugreifen. Ein Programm reflektiert sich selbst und verwendet die Metadaten, um den Benutzer zu informieren oder sein Verhalten zu ändern. Metadaten beziehen sich auf Informationen zu Objekten und Methoden.
Der Namespace System.Reflection enthält Methoden und Klassen, die die Informationen aller geladenen Typen und Methoden verwalten. Es wird hauptsächlich für Windows-Anwendungen verwendet. Zum Beispiel , um die Eigenschaften einer Schaltfläche in einem Windows-Formular anzuzeigen.
Das MemberInfo-Objekt der Klassenreflexion wird verwendet, um die einer Klasse zugeordneten Attribute zu ermitteln.
Die Reflexion wird in zwei Schritten implementiert: Zuerst erhalten wir den Typ des Objekts und dann verwenden wir den Typ, um Elemente wie Methoden und Eigenschaften zu identifizieren.
Um den Typ einer Klasse zu erhalten, können wir einfach Folgendes verwenden:
Geben Sie mytype = myClass.GetType () ein.
Sobald wir einen Klassentyp haben, können Sie leicht auf die anderen Informationen über die Klasse zugreifen.
System.Reflection.MemberInfo Info = mytype.GetMethod ('AddNumbers');
Die obige Anweisung versucht, eine Methode mit Namen zu finden AddNumbers in der Klasse meine Klasse .
F # 38) Was ist eine generische Klasse?
Antworten: Generics oder Generic-Klasse wird verwendet, um Klassen oder Objekte zu erstellen, die keinen bestimmten Datentyp haben. Der Datentyp kann zur Laufzeit zugewiesen werden, d. H. Wenn er im Programm verwendet wird.
Zum Beispiel:
Aus dem obigen Code sehen wir also zunächst zwei Vergleichsmethoden, um string und int zu vergleichen.
Bei anderen Vergleichen von Datentypparametern können wir anstelle vieler überladener Methoden eine generische Klasse erstellen und einen Ersatzdatentyp übergeben, z. B. T. T fungiert also als Datentyp, bis er speziell in der Main () -Methode verwendet wird .
F # 39) Erklären Sie die Eigenschaften von Get und Set Accessor?
Antworten: Get und Set heißen Accessors. Diese werden von Properties verwendet. Die Eigenschaft bietet einen Mechanismus zum Lesen und Schreiben des Werts eines privaten Felds. Für den Zugriff auf dieses private Feld werden diese Accessoren verwendet.
Get Property wird verwendet, um den Wert einer Eigenschaft zurückzugeben
Set Property Accessor wird zum Festlegen des Werts verwendet.
Die Verwendung von get und set ist wie folgt:
F # 40) Was ist ein Thread? Was ist Multithreading?
Antworten: Ein Thread ist eine Reihe von Anweisungen, die ausgeführt werden können, damit unser Programm gleichzeitig verarbeitet werden kann. Durch die gleichzeitige Verarbeitung können wir mehr als eine Operation gleichzeitig ausführen. Standardmäßig hat C # nur einen Thread. Die anderen Threads können jedoch erstellt werden, um den Code parallel zum ursprünglichen Thread auszuführen.
Thread hat einen Lebenszyklus. Es beginnt immer dann, wenn eine Thread-Klasse erstellt wird, und wird nach der Ausführung beendet. System.Threading ist der Namespace, der eingeschlossen werden muss, um Threads zu erstellen und seine Mitglieder zu verwenden.
Threads werden durch Erweitern der Thread-Klasse erstellt. Start() Methode wird verwendet, um die Thread-Ausführung zu starten.
//CallThread is the target method// ThreadStart methodThread = new ThreadStart(CallThread); Thread childThread = new Thread(methodThread); childThread.Start();
C # kann mehrere Aufgaben gleichzeitig ausführen. Dies geschieht durch die Behandlung verschiedener Prozesse durch verschiedene Threads. Dies wird als MultiThreading bezeichnet.
Es gibt verschiedene Thread-Methoden, die zum Behandeln von Multithread-Vorgängen verwendet werden:
Starten, schlafen, abbrechen, anhalten, fortsetzen und beitreten.
Die meisten dieser Methoden sind selbsterklärend.
F # 41) Nennen Sie einige Eigenschaften der Thread-Klasse.
Antwort: Einige Eigenschaften der Thread-Klasse sind:
- Ist am Leben - enthält den Wert True, wenn ein Thread aktiv ist.
- Name - Kann den Namen des Threads zurückgeben. Kann auch einen Namen für den Thread festlegen.
- Priorität - gibt den priorisierten Wert der vom Betriebssystem festgelegten Aufgabe zurück.
- IsBackground - Ruft einen Wert ab oder legt einen Wert fest, der angibt, ob ein Thread ein Hintergrundprozess oder ein Vordergrund sein soll.
- ThreadState - beschreibt den Thread-Status.
Q # 42) Was sind die verschiedenen Zustände eines Threads?
Antwort: Verschiedene Zustände eines Threads sind:
- Nicht gestartet - Thread wird erstellt.
- Laufen - Thread startet Ausführung.
- WaitSleepJoin - Thread ruft den Ruhezustand auf, Anrufe warten auf ein anderes Objekt und Aufrufe verbinden sich auf einem anderen Thread.
- Suspendiert - Thread wurde ausgesetzt.
- Abgebrochen - Thread ist tot, aber nicht in den Status gestoppt geändert.
- Gestoppt - Thread wurde gestoppt.
Q # 43) Was sind Async und Await?
Antworten: Async- und Await-Schlüsselwörter werden verwendet, um asynchrone Methoden in C zu erstellen.
Asynchrone Programmierung bedeutet, dass der Prozess unabhängig von Haupt- oder anderen Prozessen ausgeführt wird.
Die Verwendung von Async und Await ist wie folgt:
- Für die Methodendeklaration wird das Schlüsselwort Async verwendet.
- Die Zählung gehört zu einer Aufgabe vom Typ int, die die Methode CalculateCount () aufruft.
- Calculatecount () startet die Ausführung und berechnet etwas.
- Unabhängige Arbeiten werden an meinem Thread durchgeführt und warten, bis die Zählanweisung erreicht ist.
- Wenn der Calculatecount nicht abgeschlossen ist, kehrt myMethod zu seiner aufrufenden Methode zurück, sodass der Hauptthread nicht blockiert wird.
- Wenn der Calculatecount bereits abgeschlossen ist, steht das Ergebnis zur Verfügung, wenn das Steuerelement die Wartezeit erreicht. Der nächste Schritt wird also im selben Thread fortgesetzt. Im obigen Fall ist es jedoch nicht der Fall, dass es sich um eine Verzögerung von 1 Sekunde handelt.
F # 44) Was ist ein Deadlock?
Antworten: Ein Deadlock ist eine Situation, in der ein Prozess seine Ausführung nicht abschließen kann, weil zwei oder mehr Prozesse darauf warten, dass sie beendet werden. Dies tritt normalerweise beim Multithreading auf.
Hier wird eine gemeinsam genutzte Ressource von einem Prozess gehalten, und ein anderer Prozess wartet darauf, dass der erste Prozess sie freigibt, und der Thread, der das gesperrte Element enthält, wartet darauf, dass ein anderer Prozess abgeschlossen wird.
Betrachten Sie das folgende Beispiel:
- Aufgaben ausführen greift auf objB zu und wartet 1 Sekunde.
- In der Zwischenzeit versucht PerformtaskB, auf ObjA zuzugreifen.
- Nach 1 Sekunde versucht PeformtaskA, auf ObjA zuzugreifen, das von PerformtaskB gesperrt ist.
- PerformtaskB versucht, auf ObjB zuzugreifen, das von PerformtaskA gesperrt ist.
Dies schafft Deadlock.
Q # 45) Erklären Sie L. ock , Monitore , und Mutex Objekt in Threading.
Antworten: Das Schlüsselwort 'Sperren' stellt sicher, dass jeweils nur ein Thread einen bestimmten Abschnitt des Codes eingeben kann. In obigem Beispiel , lock (ObjA) bedeutet, dass die Sperre auf ObjA gesetzt wird, bis dieser Prozess sie aufhebt. Kein anderer Thread kann auf ObjA zugreifen.
Mutex ist auch wie eine Sperre, kann jedoch mehrere Prozesse gleichzeitig ausführen. WaitOne () wird zum Sperren verwendet und ReleaseMutex () wird zum Aufheben der Sperre verwendet. Mutex ist jedoch langsamer als Lock, da es einige Zeit dauert, es zu erwerben und freizugeben.
Monitor.Enter und Monitor.Exit implementieren die Sperre intern. Eine Sperre ist eine Verknüpfung für Monitore. lock (objA) ruft intern auf.
Monitor.Enter(ObjA); try { } Finally {Monitor.Exit(ObjA));}
F # 46) Was ist eine Rennbedingung?
Jahre: Die Race-Bedingung tritt auf, wenn zwei Threads auf dieselbe Ressource zugreifen und gleichzeitig versuchen, sie zu ändern. Der Thread, der zuerst auf die Ressource zugreifen kann, kann nicht vorhergesagt werden.
Wenn wir zwei Threads haben, T1 und T2, und sie versuchen, auf eine gemeinsam genutzte Ressource namens X zuzugreifen. Wenn beide Threads versuchen, einen Wert in X zu schreiben, wird der zuletzt in X geschriebene Wert gespeichert.
Q # 47) Was ist Thread-Pooling?
Jahre: Der Thread-Pool ist eine Sammlung von Threads. Diese Threads können verwendet werden, um Aufgaben auszuführen, ohne den primären Thread zu stören. Sobald der Thread die Aufgabe abgeschlossen hat, kehrt der Thread zum Pool zurück.
Der System.Threading.ThreadPool-Namespace verfügt über Klassen, die die Threads im Pool und seine Operationen verwalten.
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(SomeTask));
In der obigen Zeile wird eine Aufgabe in die Warteschlange gestellt. SomeTask-Methoden sollten einen Parameter vom Typ Object haben.
F # 48) Was ist Serialisierung?
Antworten: Bei der Serialisierung wird Code in sein Binärformat konvertiert. Sobald es in Bytes konvertiert ist, kann es einfach gespeichert und auf eine Festplatte oder ein solches Speichergerät geschrieben werden. Serialisierungen sind hauptsächlich dann nützlich, wenn wir die ursprüngliche Form des Codes nicht verlieren möchten und er jederzeit in der Zukunft abgerufen werden kann.
Jede Klasse, die mit dem Attribut (Serializable) gekennzeichnet ist, wird in ihre Binärform konvertiert.
Der umgekehrte Vorgang zum Zurückholen des C # -Codes aus der Binärform wird als Deserialisierung bezeichnet.
Um ein Objekt zu serialisieren, muss das Objekt serialisiert werden. Ein Stream, der das serialisierte Objekt und den Namespace System.Runtime.Serialization enthalten kann, kann Klassen für die Serialisierung enthalten.
F # 49) Welche Arten der Serialisierung gibt es?
Antwort: Die verschiedenen Arten der Serialisierung sind:
- XML-Serialisierung - Es serialisiert alle öffentlichen Eigenschaften in das XML-Dokument. Da die Daten im XML-Format vorliegen, können sie leicht in verschiedenen Formaten gelesen und bearbeitet werden. Die Klassen befinden sich in System.sml.Serialization.
- SEIFE - Klassen befinden sich in System.Runtime.Serialization. Ähnlich wie XML, erzeugt jedoch einen vollständigen SOAP-kompatiblen Umschlag, der von jedem System verwendet werden kann, das SOAP versteht.
- Binäre Serialisierung - Ermöglicht die Konvertierung von Code in seine Binärform. Kann öffentliche und nicht öffentliche Eigenschaften serialisieren und wiederherstellen. Es ist schneller und nimmt weniger Platz ein.
F # 50) Was ist eine XSD-Datei?
Antworten: Eine XSD-Datei steht für XML Schema Definition. Es gibt eine Struktur für die XML-Datei. Dies bedeutet, dass entschieden wird, welche Elemente das XML enthalten soll und in welcher Reihenfolge und welche Eigenschaften vorhanden sein sollen. Ohne eine mit XML verknüpfte XSD-Datei kann das XML beliebige Tags, beliebige Attribute und beliebige Elemente enthalten.
bester mp3 downloader für windows 10
Das Tool Xsd.exe konvertiert die Dateien in das XSD-Format. Während der Serialisierung von C # -Code werden die Klassen von xsd.exe in das XSD-kompatible Format konvertiert.
Fazit
C # wächst von Tag zu Tag rasant und spielt eine wichtige Rolle in der Software-Testbranche.
Ich bin sicher, dass dieser Artikel Ihre Vorbereitung auf das Interview erheblich erleichtern und Ihnen ein angemessenes Wissen über die meisten C # -Themen vermitteln wird.
Ich hoffe, Sie sind bereit, sich jedem C # -Interview sicher zu stellen !!
Literatur-Empfehlungen
- Interview Fragen und Antworten
- Fragen und Antworten zum ETL-Testinterview
- Top 50 der beliebtesten Fragen und Antworten zu CCNA-Interviews
- Top 51 Fragen und Antworten zum Bootstrap-Interview
- Top 20+ .NET Interview Fragen und Antworten
- Top 50+ Fragen und Antworten zum Datenbankinterview
- Einige knifflige manuelle Testfragen und -antworten
- 25 Fragen und Antworten zu den besten Agile Testing-Interviews