2.5 C#

Podstawowe operacje pisania do standardowego strumienia wyjściowego i czytania ze standardowego strumienia wejściowego są bardzo podobne do tych z Javy. Ilustruje to poniższy program:


P7: CzytPis.cs     Podstawowe operacje we/wy w C#

      1.  using System;
      2.  
      3.  class Osoba {
      4.      public string imie;
      5.      public int    wiek;
      6.  }
      7.  
      8.  class CzytPis {
      9.      public static void Main() {
     10.          Osoba os = new Osoba();
     11.          Console.Write("Podaj imie: ");
     12.          os.imie = Console.ReadLine();
     13.          Console.Write("Podaj wiek: ");
     14.          string s = Console.ReadLine();
     15.          os.wiek = Int32.Parse(s);
     16.          Console.WriteLine("Imie: " + os.imie +
     17.                            " lat: " + os.wiek);
     18.      }
     19.  }

Jeśli kompilator C# (csc.exe) jest w widocznej ścieżce, to program ten można skompilować i uruchomić jak poniżej:
    C:\csharp> csc CzytPis.cs
    ....
    C:\csharp> CzytPis
    Podaj imie: Karol
    Podaj wiek: 34
    Imie: Karol lat: 34
    C:\csharp>

Znając Javę, rozumiemy ten kod doskonale, choć dają się zauważyć pewne różnice. Podstawowy pakiet klas nazywa się System (w Javie było to java.lang), a zamiast instrukcji import piszemy using. W odróżnieniu od Javy ten podstawowy pakiet musimy zaimportować (w Javie pakiet java.lang nie musiał być importowany). Rezultat jest jednak podobny: w obu przypadkach nie dołączamy pliku, jak to robimy dyrektywą preprocesora #include w C++, ale dodajemy dodatkową przestrzeń nazw do przeszukiwania klas podczas kompilacji i wykonania.

Dalej: funkcja Main może być w C# bezparametrowa, choć nie musi: może też mieć argument, jak w Javie, typu string[]. W Javie funkcja main musiała być funkcją bezrezultatową: w C# może również być funkcją bezrezultatową, ale może, jak w C++, zwracać rezultat całkowity.

Inne różnice to pewne różnice w składni i nazwach: zamiast znanej z Javy funkcji System.out.println() mamy Console.WriteLine(), zamiast System.out.print() mamy Console.Write(), nazwę funkcji Main piszemy w C# z dużej litery, za to nazwę klasy string z małej (choć można napisać z dużej, string jest synonimem String, tak jak int jest synonimem Int32).

Język C# dostarcza też wygodnego sposobu, którego brakowało w Javie, na wczytywanie danych w postaci napisu ze standardowego wejścia (konsoli). Widzimy to w liniach 12 i 14. W Javie, jak pamiętamy, czytanie z konsoli wymagało „opakowywania” strumienia wejściowego w obiekt klasy InputStreamReader. Tak jak w Javie natomiast czytamy dane w postaci napisów, z których możemy następnie „wyczytać” np. liczbę całkowitę (linia 15; Int32 jest tu synonimem int). Pod tym względem C++ jest bardziej elastyczny: jak widzieliśmy w programie czyt.cpp, w tym języku dane możemy wczytywać bezpośrednio do zmiennych (w żargonie informatyków: na zmienne) różnych typów.

T.R. Werner, 21 lutego 2016; 20:17