C # Spickzettel für Java-Techniker

Hintergrund

Ich habe bisher hauptsächlich an Java gearbeitet, aber ich habe mich für C # entschieden, das ich selten angesprochen habe, also habe ich studiert. Es gibt einige Ähnlichkeiten, aber es gibt Unterschiede in den Ideen und subtile Unterschiede beim Schreiben, also dachte ich, dass "wie soll ich das schreiben?" Auf jeden Fall auftreten wird, also habe ich die Stellen ausgewählt, von denen ich denke, dass ich sie oft verwenden werde, und Spickzettel Ich habe versucht, als zusammenzufassen. Ich werde die Details eins nach dem anderen kennen.

Erklärung der zu verwendenden Verpackung

Java Die Art zu telefonieren ist anders.

import java.util.ArrayList;

C#

using System.Collections.Generic;

Paketdefinition

Die Erklärung ist anders. Seien Sie auch vorsichtig bei der Benennung, da die Idee anders ist.

Java

package StudyPackage.com.anyplus

C#

namespace StudyPackage
//Es gibt keine Domain, weil die Idee anders ist

Zugriffsmodifikator

Es gibt "interne" und "geschützte interne", die Java nicht hat. Beachten Sie auch, dass selbst mit demselben Modifikator der zugängliche Bereich je nach den unterschiedlichen Ideen unterschiedlich ist.

Qualifikation Java C#
public Von überall zugänglich Von überall zugänglich
protected Zugriff über dasselbe Paket oder abgeleitete Klassen Zugriff von abgeleiteten Klassen
internal nicht existieren Gleiche Montage(DLL)Innerhalb zugänglich
protected internal nicht existieren Gleiche Montage(DLL)Nur innerhalb oder von Typen zugänglich, die von der gespeicherten Klasse abgeleitet sind
private Nur innerhalb derselben Klasse zugänglich Nur innerhalb derselben Klasse zugänglich
nicht spezifiziert
(default)
Kann innerhalb desselben Pakets abgerufen werden Gleiche Behandlung wie privat

** Was ist dieselbe Assembly (DLL)? ** Dieselbe Assembly ist dieselbe exe-Datei oder DLL-Datei. Es scheint, dass es sich um dasselbe Projekt innerhalb der VisualStudio-Lösung handelt.

Erbe

Verwenden Sie beim Erben : (Doppelpunkt). Fügen Sie der Methode, die Sie überschreiben möchten, "virtuell" hinzu und fügen Sie "überschreiben" hinzu, um sie zu überschreiben. Wenn Sie das Überschreiben verhindern möchten, fügen Sie in Java der Methode "final" hinzu, in C # jedoch "ealed ". (Aktualisiert am 2020.07.21)

Java

class Program {
    public static main(string[] args) {
        SubA cl = new SubA();
        cl.printStr1();    //SubA printStr1
    }
}

class Base {
    public void printStr1(){
        System.out.println("Basis printStr1");
    }
}

class SubA extends Base {
    public void printStr1(){
        System.out.println("SubA printStr1");
    }
}
class SubA extends Base {
    public final void printStr2(){   //Diese Methode kann nicht überschrieben werden
        System.out.println("SubA printStr1");
    }
}

C#

class Program
{
    static void Main(string[] args)
    {
        SubA cl = new SubA();
        cl.printStr1();    //SubA printStr1
    }
}

class Base {
    public virtual void printStr1(){
        Console.WriteLine("Basis printStr1");
    }
}

class SubA : Base {
    public override void printStr1(){
        Console.WriteLine("SubA printStr1");
    }
}
class SubA : Base {
    public override sealed void printStr1(){   //Diese Methode kann nicht überschrieben werden
        Console.WriteLine("SubA printStr1");
    }
}

Wenn Sie vergessen, virtuell hinzuzufügen oder zu überschreiben

Wenn Virtual und Override nicht hinzugefügt werden, werden sie nicht überschrieben. Referenzseite Das Ergebnis ist wie folgt. (Aktualisiert am 2020.07.21)

// https://wandbox.org/permlink/bE71rRgU8ZLTktBS

namespace Wandbox
{
    class Program
    {
        static void Main(string[] args)
        {
            SubClass c1 = new SubClass();
            c1.Method1();   // Class Method1
            c1.Method2();   // Class Method2

            BaseClass c2 = new SubClass();
            c2.Method1();   //Basismethode1 * Weil es nicht überschrieben wurde
            c2.Method2();   // Class Method2
        }
    }

    public class BaseClass
     {
         public void Method1() 
         {
             Console.WriteLine("Base Method1");
         }

        public virtual void Method2() 
         {
             Console.WriteLine("Base Method2");
         }
    }


    public class SubClass : BaseClass
     {
         public void Method1() 
         {
            Console.WriteLine("Class Method1");
         }

        public override void Method2() 
         {
             Console.WriteLine("Class Method2");
         }
    }
}

if-Anweisung

Kein Unterschied. Der Unterschied besteht darin, dass String-Vergleiche auch mit Gleichheitsoperatoren verglichen werden können.

Java

String strVal = "";

if("str".equals(strVal)){
    System.out.println("Es ist das gleiche");
} else
{
    System.out.println("Nein");
}

C#

string strVal = "";

if("str" == strVal){  //Ergänzung
    Console.WriteLine("Es ist das gleiche");
} else
{
    Console.WriteLine("Nein");
}

** Ergänzung ** Da der String-Typ ein Referenztyp ist, wird beim Vergleich mit dem Gleichheitsoperator in Java verglichen, ob er sich auf dieselbe Instanz bezieht. Im Fall von C # ist es jedoch möglich, Werte mit dieser Schreibmethode zu vergleichen, da string.equals hinter den Kulissen aufgerufen wird. .. Es gibt auch eine Methode namens "String.equals (String, StringComparison)", mit der Sie eine Vergleichsmethode angeben können. Ich hielt es daher für sicher, diese beim Schreiben von Code zu verwenden ... aber wenn dasselbe getan wird, die Codemenge Ist der Gleichheitsoperator mit weniger besser? (Aktualisiert am 2020.07.17)

Referenz → String.Equals-Methode --.NET-Tipps | dobon.net

switch-Anweisung

Kein Unterschied

Java

int month = 7;
switch (month)
{
case 1:
case 2:
case 3:
    System.out.println("1Q");
    break;
case 4:
case 5:
case 6:
    System.out.println("2Q");
    break;
case 7:
case 8:
case 9:
    System.out.println("3Q");
    break;
case 10:
case 11:
case 12:
    System.out.println("4Q");
    break;
default:
    System.out.println("Unzulässiger Wert.");
    break;
}

C#

int month = 7;
switch (month)
{
case 1:
case 2:
case 3:
    Console.WriteLine("1Q");
    break;
case 4:
case 5:
case 6:
    Console.WriteLine("2Q");
    break;
case 7:
case 8:
case 9:
    Console.WriteLine("3Q");
    break;
case 10:
case 11:
case 12:
    Console.WriteLine("4Q");
    break;
default:
    Console.WriteLine("Unzulässiger Wert.");
    break;
}

zur Aussage

Die Java-Erweiterung für Anweisung ist für jede in C #.

Java

for(int i = 0; i <= 10; i++){
    System.out.println(str);
}

String[] strArgs = {"1", "2"};
for(String str : strArgs){
    System.out.println(str);
}

C#

for(int i = 0; i <= 10; i++){
    Console.WriteLine(str);
}

string[] strArgs = {"1", "2"};
foreach(string str in strArgs){
    Console.WriteLine(str);
}

while-Anweisung

Es gibt keinen Unterschied zwischen Vorurteil und Nachurteil.

Java

int i = 0;
while (i < 5) {
    System.out.println(i); //0,1,2,3,4 wird ausgegeben
    i++;
}

do {
    System.out.println(i); //0,1,2,3,4 wird ausgegeben
    i++;
} while (i < 5);

C#

int i = 0;
while (i < 5) {
    Console.WriteLine(i); //0,1,2,3,4 wird ausgegeben
    i++;
}

do {
    Console.WriteLine(i); //0,1,2,3,4 wird ausgegeben
    i++;
} while (i < 5);

Referenz

[Vergleich zwischen C # und Java](http://www.yo.rim.or.jp/~nag/cgi-bin/wiki.cgi?p=C%23%A4%C8Java%A4%CE%C8%E6 % B3% D3) Einführung in C #

Recommended Posts

C # Spickzettel für Java-Techniker
Java Spickzettel
Java Stream API Spickzettel
Wettbewerbsfähige Programmierung privater Spickzettel (Java)
Javac, Jar, Java Befehl Spickzettel
Cheet Sheet für Java-erfahrene Leute, um Ruby (Rails) zu lernen
Erste Schritte mit Ruby für Java-Ingenieure
Technologie zum Lesen des Quellcodes (Cheet Sheet)
[Java] Spickzettel für Datentyp / Zeichenkettenklasse
Für JAVA-Lernen (2018-03-16-01)
JMeter Spickzettel
2017 IDE für Java
Kotlin Spickzettel
[Docker Spickzettel]
Java für Anweisung
Für Java-Ingenieure, die ab sofort Kotlin starten
Erste Schritte mit Groovy für problematische Java-Ingenieure
Mockito + PowerMock Spickzettel
[Java] Paket für die Verwaltung
Eclipse Sammlungen Cheet Sheet
[Java] für Anweisung / erweitert für Anweisung
Schienen Tutorial Cheet Sheet
Spring Boot2 Spickzettel
Java-Programmierübungen für Neulinge, die bei aktiven Ingenieuren unbeliebt sind
Gegenmaßnahmen für OutOfMemoryError in Java
SCSS Notation Spickzettel
NLP für Java (NLP4J) (2)
(Memo) Java für Anweisung
NLP für Java (NLP4J) (1)
Was Java-Ingenieure benötigen, um sich auf die Java 11-Version vorzubereiten
Docker Befehl Spickzettel
Java-Debug-Ausführung [für Java-Anfänger]
[Java] Grundlegende Aussage für Anfänger
Bücher zum Erlernen von Java
Schnellstes Primzahl-Beurteilungsprogramm C # Java C ++
2018 Java Proficiency Test für Newcomer-Basics-
[Eclipse] Shortcut Key Spickzettel
Java-Thread sicher für Sie
Java für Anfänger, Daten verstecken
[Java] Tipps zum Schreiben der Quelle
Reproduzieren Sie die Java-Enumeration in C #
Java-Installationsort für Mac
C # und Java überschreiben Story
Java-Anwendung für Anfänger: Stream
Java während und für Anweisungen
Was wählen Java-Ingenieure für das "automatische Testen" ihrer Browser? Selen? Selenid? Geb?