Tartalomjegyzék
CSharp példák
Néhány előforduló feladat megoldása található itt.
Tömb kezdőértéke
Kezdőérték:
int[] szamok = new int[5] {1, 2, 3, 4, 5}; string[] nevek = new string[3] {"Jóska", "Pista", "Kati"};
A tömb mérete elhagyható:
int[] numbers = new int[] {1, 2, 3, 4, 5}; string[] names = new string[] {"Jóska", "Pista", "Kati"};
Több dimenziós tömb:
int[,] szamok = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} }; string[,] tertverek = new string[2, 2] { {"Misi","Anna"}, {"Mari","Albert"} };
A tömb mérete elhagyható:
int[,] szamok = new int[,] { {1, 2}, {3, 4}, {5, 6} }; string[,] testverek = new string[,] { {"Misi","Anna"}, {"Mari","Albert"} };
Elhagyható a new operátor is:
int[,] szamok = { {1, 2}, {3, 4}, {5, 6} }; string[,] testverek = { {"Misi","Anna"}, {"Mari","Albert"} };
Verem
using System; using System.Collections; class Program { static void Main() { Stack verem = new Stack(); verem.Push(20); verem.Push(50); Console.WriteLine("{0}", verem.Pop()); Console.WriteLine("{0}", verem.Pop()); } }
A Stack osztály a System.Collections névtérben található.
Lásd még a következőket:
- System.Collections.List
- System.Collections.Queue
- System.Collections.Dictionary
- System.Collections.Stack
Reguláris kifejezések
Példányosítással
using System; using System.Text.RegularExpressions; class Program { public static void Main() { Console.WriteLine("Hi"); Regex rk = new Regex("^T"); //Egyezés vizsgálata Console.WriteLine(rk.IsMatch("TamTam")); //Csere Console.WriteLine(rk.Replace("TenTger", "t")); //Darabolás Regex rk2 = new Regex(":"); String[] tomb1 = rk2.Split("alma:körte:barack"); Console.WriteLine(tomb1[2]); //Egyezés vizsgálat Console.WriteLine(Regex.IsMatch("tárgy", "reg")); //Csere Regex.Replace("tárgy", "regkif", "csereszöveg") Console.WriteLine(Regex.Replace("TenTger", "^T", "t")); //Darabolás String[] tomb = Regex.Split("alma:körte:barack", ":"); Console.WriteLine(tomb[1]); } }
Statikusan
Regex.IsMatch("tárgy", "reg"));
Magánhangzók megszámolása
Console.WriteLine(Regex.Matches("tekereg", "[e|i|e|]").Count );
Mássalhangzók megszámolása
Console.WriteLine(Regex.Matches("tekereg", "[^e|i|e|]").Count );
StringBuilder használata
using System; using System.Text; class Program { public static void Main() { Console.WriteLine("Hi"); StringBuilder s = new StringBuilder("körte"); s.Append("alma"); Console.WriteLine(s.Length); } }
s.AppendLine(); //Egy üres sor hozzáfűzése s.Append("szöveg").AppendLine(); //Egy üres sor hozzáfűzése
StringBuilder átalakítása String-gé:
string innerString = builder.ToString();
Listák használata
using System; using System.Collections.Generic; class Program { public static void Main() { Console.WriteLine("Listák használata"); List<int> szamok = new List<int>(); szamok.Add(3); szamok.Add(1); szamok.Add(5); szamok.Add(4); szamok.Add(9); szamok.Add(6); for (int i = 0; i<6; i++) Console.WriteLine(szamok[i]); szamok.Sort(); for (int i = 0; i<6; i++) Console.WriteLine(szamok[i]); Console.WriteLine("Száma: " + szamok.Count); } }
Váltás számrendszerek között
using System; class Program { public static void Main() { int a = 11; Console.WriteLine(Convert.ToString(a,16)); //Váltás decimálisból binárisba string s = "111"; Console.WriteLine(Convert.ToInt32(s, 2)); //Váltás binárisból decimálisban string s = "b"; Console.WriteLine(Convert.ToInt32(s, 16)); //Váltás hexadecimálisból decimálisba } }
Figyeljük, meg hogy a ToString() és a ToInt32() metódus második paramétere a számrendszer amibe vagy amiből váltunk.
MD5 lenyomat
Az MD5 lenyomat készítése és ellenőrzése
using System; using System.Text; using System.Security.Cryptography; class Program { static string lekerMd5Lenyomat(string input) { // md5 titkosító objektum példány létrehozása MD5 md5 = MD5.Create(); //A bejövő stringet átkonvertáljuk byte tömbbe: byte[] adat = md5.ComputeHash(Encoding.Default.GetBytes(input)); StringBuilder s = new StringBuilder(); // A bytok minden elemét hexadecimális formára hozzuk. for(int i=0; i< adat.Length; i++) s.Append(adat[i].ToString("x2").ToLower()); return s.ToString(); } static bool ellenorizMd5Lenyomat(string input, string hash) { string inputHash = lekerMd5Lenyomat(input); StringComparer hasonlito = StringComparer.OrdinalIgnoreCase; if (0 == hasonlito.Compare(inputHash, hash)) { return true; } else { return false; } } static void Main() { string source = "Helló Világ"; string hash = lekerMd5Lenyomat(source); Console.WriteLine("Forrás: " + source + " md5 lenyomata: " + hash); Console.WriteLine("A lenyomat ellenőrzése"); if (ellenorizMd5Lenyomat(source, hash)) { Console.WriteLine("A lenyomat egyezik"); } else { Console.WriteLine("A lenyomat nem egyezik"); } } }
Lokalizálás
Több nyelvű program
Az alábbi program két szót ír a képernyőre egymás után. Jó és rossz. A program mindig azon a nyelven írja ki, amit beállítunk. Lásd: hu-HU. Ha a „hu-HU” rész tartalmazó sort teszem megjegyzésbe a már megjegyzésben lévő helyére, akkor az adott környezet alapján dönti el a program, hogy milyen nyelven kell megjeleníteni.
main.cs
using System; using System.Globalization; //CultureInfo using System.Resources; //ResourceManager using System.Reflection; //Assembly class Program { static void Main() { //CultureInfo kultura = new CultureInfo(CultureInfo.CurrentUICulture.Name); CultureInfo kultura = new CultureInfo("hu-HU"); ResourceManager rm = ResourceManager.CreateFileBasedResourceManager("nemz", ".", null); Console.WriteLine(rm.GetString("good", kultura)); Console.WriteLine(rm.GetString("bad", kultura)); } }
main.en-US.txt
good=good bad=bad
main.fr-FR.txt
good=bon bad=mal
main.hu-HU.txt
good=jó bad=rossz
Lefordítjuk a nyelvi fájlokat erőforrásfájlokká:
resgen main.en-US.txt resgen main.fr-FR.txt resgen main.hu-HU.txt
A következő fájlokat kapjuk:
- main.en-US.resources
- main.fr-FR.resources
- main.hu-HU.resources
Ezekkel fordítjuk a forrásfájlt:
gmcs -linkresource:main.en-US.resources -linkresources:main.fr-FR.resources -linkresources:main.hu-HU.resources main.cs
Ide vonatkozó külső link:
Titkosítás
using System; using System.Security.Cryptography; using System.Text; class Program { public static void Main() { TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); byte[] key = {2, 3, 5,3,4,3,4,8,9,3,3,2,3,4,6,5,2,3,5,3,2,3,3,4}; byte[] plainText = Encoding.Default.GetBytes("almaalma"); tdes.KeySize = 192; tdes.Key = key; tdes.Mode = CipherMode.ECB; tdes.Padding = PaddingMode.None; ICryptoTransform ic = tdes.CreateEncryptor(); byte[] enc = ic.TransformFinalBlock(plainText, 0,8); Console.WriteLine(Convert.ToBase64String(enc)); } }
Jelszó bekérése
using System; class Program { static string getPassword() { Console.Write("Jelszó: "); string jelszo = null; ConsoleKeyInfo info; do { info = Console.ReadKey(true); if(info.Key == ConsoleKey.Backspace) { if(! String.IsNullOrEmpty(jelszo)) jelszo = jelszo.Substring(0, jelszo.Length - 1); } else { jelszo += info.KeyChar; Console.Write("*"); } } while(info.Key != ConsoleKey.Enter); Console.WriteLine(); return jelszo; } public static void Main() { Console.WriteLine("Azonosítás"); Console.Write("Felhasználónév: "); string felhasznalonev = Console.ReadLine(); string jelszo = getPassword(); Console.WriteLine("\n\nBeírt felhasznalonev: {0}", felhasznalonev); Console.WriteLine("Beírt jelszó: {0}", jelszo); } }
Konfiguráció tárolása
main.cs
/* kell a fordításhoz: -r:System.Configuration A futatható fájllal azonos nevű fájlt kell létrehozni. Pl.: main.exe.config */ using System; using System.Configuration; class Program { public static void Main() { System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration( ConfigurationUserLevel.None); config.AppSettings.Settings["Név"].Value = "valami"; config.Save(ConfigurationSaveMode.Full); Console.WriteLine(config.AppSettings.Settings["Jelszó"].Value); } }
main.exe.config
<?xml version="1.0" encoding="utf-8"?> <configuration><appSettings> <clear /> <add key="Név" value="valami" /> <add key="Jelszó" value="titok" /> </appSettings></configuration>
Útvonalak
Ez a rész az útvonalak kiíratásáról szól. A címsor csak azért van, mert a legegyszerűbb módon akartam kiírni valahova a kapott útvonalat.
Útvonal a címsorban
using System.Windows.Forms; class Program : Form { Program() { Text = Application.StartupPath; } static void Main() { Application.Run(new Program()); } }
Útvonal fájlnévvel
using System.Windows.Forms; class Program : Form { Program() { Text = Application.ExecutablePath; } static void Main() { Application.Run(new Program()); } }
Mérés
Szeretnénk megmérni, hogy a for ciklusunk mennyi idő alatt fut le. Ehhez a System.Diagnostics névtér Stopwatch osztályát használjuk.
using System; using System.Diagnostics; class Program { public static void Main() { Stopwatch watch = new Stopwatch(); watch.Start(); for(int i = 0; i<1000000; i++) ; watch.Stop(); Console.WriteLine("Eltelt idő : {0}", watch.Elapsed); Console.WriteLine("Eltelt idő milliszekundumban: {0}", watch.ElapsedMilliseconds); Console.WriteLine("Eltelt idő időzítő ütemében : {0}", watch.ElapsedTicks); } }
Előfordítói utasítások
#if
#else
#elif
#endif
#define
#undef
#warning
#error
#line
#region
#endregion
#pragma
#pragma warning
#pragma checksum
#define DEBUG // ... #if DEBUG Console.WriteLine("Debug version"); #endif
#define DEBUG #define VC_V6 using System; class Program { static void Main() { #if (DEBUG && !VC_V6) Console.WriteLine("DEBUG beállítva"); #elif (!DEBUG && VC_V6) Console.WriteLine("VC_V6 beállítva"); #elif (DEBUG && VC_V6) Console.WriteLine("DEBUG és VC_V6 beállítva"); #else Console.WriteLine("DEBUG és VC_V6 nincs beállítva"); #endif } }
Operációs rendszer lekérdezése
using System; class Program { static void Main() { OperatingSystem osInfo = Environment.OSVersion; Console.WriteLine(osInfo); Console.WriteLine(osInfo.Version.Minor); Console.WriteLine(osInfo.Version.Major); Console.WriteLine(osInfo.Platform); // platform meghatározása switch(osInfo.Platform) { // A platform Windows 95, Windows 98, // Windows 98 Second Edition vagy Windows Me. case System.PlatformID.Win32Windows: switch (osInfo.Version.Minor) { case 0: Console.WriteLine ("Windows 95"); break; case 10: if(osInfo.Version.Revision.ToString()=="2222A") Console.WriteLine("Windows 98 Second Edition"); else Console.WriteLine("Windows 98"); break; case 90: Console.WriteLine("Windows Me"); break; } break; // Ha a platform Windows NT 3.51, Windows NT 4.0, Windows 2000, // vagy Windows XP. case System.PlatformID.Win32NT: switch(osInfo.Version.Major) { case 3: Console.WriteLine("Windows NT 3.51"); break; case 4: Console.WriteLine("Windows NT 4.0"); break; case 5: if (osInfo.Version.Minor==0) Console.WriteLine("Windows 2000"); else Console.WriteLine("Windows XP"); break; } break; } } }
Külső program indítása
using System; using System.Diagnostics; class Program { [STAThread] // kezeletlen szál kezelése static void Main() { Process proc; // folyamat deklarálása // esetleg: "C:\\test.bat" proc = Process.Start("cmd"); // Parancs futtatása proc.WaitForExit(); // Várunk a folyamat végére } }
A program feldob egy parancsablakot.
[STAThread] //Egy szálas [MTAThread] //Több szálas
FizzBuzz
Veszünk egy számsorozatot. Kiíratjuk a számokat a képernyőre, de ha 3-mal osztható maradék nélkül akkor azt írom ki, hogy „fizz”, ha 5-tel osztható maradék nélkül, akkor azt írjuk ki, hogy „buzz”. Ha 5-tel és 3-mal is osztható maradék nélkül, akkor azt írjuk ki, hogy „fizzbuzz”.
- Program01.cs
using System; class Program { public static string Answer(int i) { string res = null; if(i%3==0) res = "fizz"; if(i%5==0) res += "buzz"; if(i%3!=0 && i%5!=0) res = Convert.ToString(i); return res; } public static void Main() { int[] t = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; for(int i=0; i<t.Length;i++){ Console.WriteLine(Answer(t[i])); } } }
Fibonacci
- Program01.cs
using System; class Program { public static int Fibonacci(int n) { int f=0; int seged0 = 0; int seged1 = 1; if (n == 0) { return 0; } else if (n==1) { return 1; } else { for(int i=2; i<=n; i++) { f =seged0 + seged1; seged0 = seged1; seged1 = f; } } return f; } public static void Main() { Console.WriteLine(Fibonacci(8)); } }
Windows naplóbaírás
- Program01.cs
using System; using System.Diagnostics; class Program01 { public static void Main() { Console.WriteLine("Naplóba írás előtt Enter nyomj"); Console.ReadKey(); string sSource; string sLog; string sEvent; sSource = "EventSystem"; sLog = "Application"; sEvent = "Sample Event"; if (!EventLog.SourceExists(sSource)) { EventLog.CreateEventSource(sSource,sLog); } EventLog.WriteEntry(sSource,sEvent); EventLog.WriteEntry(sSource, sEvent, EventLogEntryType.Warning, 5000); } }