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