[[oktatas:programozás:csharp|< CSharp]]
====== 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 szamok = new List();
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:
* http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo%28v=vs.71%29.aspx
===== 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
===== Ú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".
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
===== Fibonacci =====
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 =====
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);
}
}
===== Külső linkek =====
Tömb kézikönyv:
* http://msdn.microsoft.com/en-us/library/aa288453%28VS.71%29.aspx
Listák:
* http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx