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:
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. }
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