- szemétgyűjtőt használ
- A legtöbb objektum-hozzáférés csak biztonságos hivatkozásokon keresztül tehető meg, és az aritmetikai műveletek debug módban túlcsordulás szempontjából ellenőrzöttek.
- a szemétgyűjtő szabadítja fel az objektumokat, mikor már nincs rájuk hivatkozás
- destruktorok (
~) elérhetőek. A megfelelően megírtIDisposableinterfész (Disposable programozási minta), aminek a lefutását garantálja using blokk, együtt kikényszerítheti az azonnali felszabadítást az osztályon belüli natív erőforrások esetében. A nem natív erőforrások felszabadítását ebben az esetben is a szemétgyűjtő (Garbage Collector) végzi. A finalizerek szintén rendelkezésre állnak, de nem váltanak ki azonnali felszabadítást.- csak egyszeres öröklődést támogat, de egy osztály több interfészt is megvalósíthat
- Az egyetlen implicit konverzió a biztonságos konverzió, úgy mint az egészek tágabb intervallumba konvertálása vagy a leszármazott osztályok alaposztályba konvertálása. Nincs implicit konverzió az egészek és a logikai típus (
boolean) között, a felsorolás tagok és az egészek között. Nincsenek void mutatók (bár az Object osztályra mutató mutatók hasonlóak), valamint bármely, a felhasználó által definiált implicit konverziót explicit módon meg kell jelölni.- felsorolás adattagjai a saját névtérben
- 2.0+ rendelkezik a generikus programozás néhány eszközével
- alapértelmezett láthatósága
private- kód névterekbe van rendezve, mely a hasonló funkciót ellátó osztályokat fogja össze. Például
System.Drawinga grafikai,System.Collectionsaz adatstruktúra ésSystem.Windows.Formsa Windows ablakos megjelenítéséért felelős funkciókat fogja össze.- sorok vége
;- Namespaces are named using Pascal Case (also called
UpperCamelCase)- If an assembly contains only one namespace, the assembly and the namespace should use the same name. Otherwise, assemblies should follow the normal Pascal Case format.
- kivételek a
System.Exception-ből származnak le- aming conventions combined.
using System;
namespace MyExampleNamespace
{
public class Customer : IDisposable
{
private string _customerName;
public string CustomerName
{
get
{
return _customerName;
}
set
{
_customerName = value;
_lastUpdated = DateTime.Now;
}
}
private DateTime _lastUpdated;
public DateTime LastUpdated
{
get
{
return _lastUpdated;
}
private set
{
_lastUpdated = value;
}
}
public void UpdateCustomer(string newName)
{
if (!newName.Equals(CustomerName))
{
CustomerName = newName;
}
}
public void Dispose()
{
//Do nothing
}
}
}Tartalom
- Visual Studio
- Alap adattípusok
Hello Worldprogram- I/O alapok
- Számok
- Szövegek
- Logikai változók és összehasonlítások
- Típuskonverzió
- pointerek, mutatók
- Tömbök, sorok
ifthenelseswitch-case- Cilusok
- y = x^2 grafikonja
- Példaprogram
- Egyéb hasznos C# parancsok
- GUI programozás
- Letöltés és telepítés
- Szükséges telepítendő csomag(ok):
.NET desktop developmentésUniversal Windows Platform Development Create New Project>Console App (.NET Core)- Sor sorszámozás bekapcsolása: https://docs.microsoft.com/en-us/visualstudio/ide/reference/how-to-display-line-numbers-in-the-editor?view=vs-2019
IntegerByteShortIntLong
Floating pointFloatDouble
booleanClassesInterfacesArraysStringsbővebben: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types
fájl: Hello World.sln, Hello World
using System;
namespace Hello_World
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}fájl: ConsoleBasedIO
using System;
namespace ConsoleBasedIO
{
class Program
{
static void Main(string[] args)
{
Console.Write("What is your name? ");
var name = Console.ReadLine();
Console.WriteLine($"Hello {name}, nice name!"); //fontos, hogy " és nem '
Console.Write($"so, hey {name}, What would you like to order today? "); //változóval kiíratás
var order = Console.ReadLine();
Console.Write($"Well, this {order} sounds delicious!\nThis will be ");
Console.BackgroundColor = ConsoleColor.Blue; //sor háttérszínének megváltoztatása, bővebben: https://www.dotnetperls.com/console-color
Console.WriteLine("$5.6");
Console.BackgroundColor = ConsoleColor.Black; //sor háttérszínének megváltoztatása
}
}
}A
változónév++és++változónévközti különbség az, hogy előbbi visszadja előbb a változó eredeti értékét, majd megnöveli az értéket, utóbbi viszont előbb növel, aztán adja vissza az értéket.
fájl: ProgramVariableNumbers
int number = 53;
int aNumber;
var someNumber = 33;
Console.Write("Enter a number: ");
aNumber = Convert.ToInt32(Console.ReadLine());
Console.WriteLine($"Number 1: {number}, A number: {aNumber}, Some Number: {someNumber}");
double doubleValue = 44.5;
var anotherDouble = 54.66;
Console.Write("Enter a decimal number: ");
double enteredNumber = Convert.ToDouble(Console.ReadLine());
Console.WriteLine($"Double1: {doubleValue}, Another: {anotherDouble}, Entered: {enteredNumber}");
int counter = 0;
for (int i = 0; i < 15; i++)
{
counter++;
Console.WriteLine($"Counter is: {counter}");
}
Console.WriteLine(" ");
for (int i = 0; i < 15; i++)
{
counter--;
Console.WriteLine($"Counter is: {counter}");
}
var answer = aNumber + number / 122 * doubleValue - anotherDouble;
Console.WriteLine($"Aswer: {answer} :) ");A karakterek sázmok amik szöveggé alakíthatóak, ha összefűzünk karaktereket akkor a végeredmény alapértelmezetten lehet szám !
fájl: programVariableStrings
string aString = "Hello";
string anotherstring = "XY";
string theString;
string bString = string.Empty;
var varString = "one more";
Console.Write("Enter a string: ");
theString = Console.ReadLine();
Console.WriteLine($"Astring: {aString}, another: {anotherstring}, theString: {theString}");
Console.WriteLine($"Astring: {aString.Length}, another: {anotherstring.Length}, theString: {theString.Length}");
string concat = aString + " " + anotherstring;
Console.WriteLine($"concat: {concat}");
Console.WriteLine("concat: "+ concat);
char aChar = 'A';
char bChar = 'B';
char cChar = 'C';
char dChar;
Console.WriteLine($"{aChar}|{bChar}|{cChar}");
string ABC = aChar.ToString() + bChar.ToString() + cChar.ToString();
Console.WriteLine(ABC);
Console.Write("Pls enter 4 chars: ");
aChar = Convert.ToChar(Console.Read());
bChar = Convert.ToChar(Console.Read());
cChar = Convert.ToChar(Console.Read());
dChar = Convert.ToChar(Console.Read());
Console.ReadLine();
Console.WriteLine($"{aChar},{bChar},{cChar},{dChar}");static void Main(string[] args)
{
}A függvényenk átadható szöveges argumentumok.
A Console.Writeline(args[0]) használatához a menüsorból: build -> build solution(F6) -> project click -> open folder in file explorer -> project név -> build -> debug -> valami.exe futtatása parancssorból és név után argumentum megadása, pl: C:\User\valami\programnev.exe almafa
>,<,>=,<=,==,!=&&,||,^=,&=fájl: variableBooleanAndCompare
bool TrueValue = true;
bool falseValue = false;
Console.WriteLine($"true: {TrueValue}; false: {falseValue}");
int a = 5, b = 6, c = 7, d = 9;
TrueValue = a < b;
falseValue = b > c;
bool compareValue1 = TrueValue || falseValue; // || az or
bool compareValue2 = TrueValue && !falseValue; // && az and
Console.WriteLine($"compareValue1: {compareValue1}; compareValue2: {compareValue2}");
bool compareValue = a == b;
Console.WriteLine(compareValue);
compareValue = a != b;
Console.WriteLine(compareValue);int age = 100;
string name = "Béla"
age.ToString();Ehez hasonlóan az int, float, double, bool típusokat is át lehet konvertálni változónév.ToString(); használatával, vagy a ToString() függvénynek argumentumként átadva, pl: ToString(7.0002);. Ehhez hasonlóan léteznek a Convert.ToInt();, Convert.ToDouble(); és hasonló függvények is.
Ugyanakkor a Javahoz megszokottként lehet típuskényszerítést használni:
double y = 55.089;
int z = (int) y;sizeof()- az adattípus méretét adja visszatypeof()- az osztály típusát adja vissza&- változó címre hivatkozás, pl:&a;*- mutató a változóra, pl*a;egy mutatót hoz létrea-ra
Egy üres int tömb definiálása, ahol array a tömb neve:
int[] array;Egy 100 méretű int tömb definiálása, ahol array a tömb neve:
int[100] array;másik módszer:
public string[] Flavors = {"Vanilla", "Oreo", "AmeriShop Dream", "French Vanilla", "Mint", "Better Batter", "Rocky Road", "Mint Chocolate Chip", "Coffee", "Phish Food", "New York Super Fudge Chunk" };Ugyanakkor a rendezés sem nehéz
Array.Sort(Flavors);
Utility.AllValues(Flavors);
//////
public static void AllValues(String[] _array)
{
for (int i = _array.GetLowerBound(0); i <= _array.GetUpperBound(0); i++)
{
//space adds padding on the left side
Console.WriteLine(space + _array[i]);
}
Console.WriteLine();Keresés: Utility.Search(ARRAY, SEARCHTERM)
public static bool Search(string[] _array, string _string)
{
bool result = false;
int i = 0;
foreach (string s in _array)
{
_array[i] = s.ToLower();
i++;
}
if (Array.Find(_array, element => element == _string) == _string)
{
result = true;
}
else
{
result = false;
}
return result;
} {
// ami a zárójelek között van :)
// egy namspacen belül
}Ezeken belül használhatóak:
break- kilép az aktuális futtatási egységbőlcontinue- kihagyja a hátralevő logikai részeket és a futtatási egység végére lép, csak ciklusokban használható, de azokon belül hasznosgotougrik a jelzett sorhoz <- FUCK YOU OBJEKTUMORIENTÁLTSÁGreturn- visszatéréési értékthrow- kivételdobás
fájl: payCheck
gyors
ifértékadás:?:használata:if feltétel_igaz ? akkor_igaz_érték : egyébként_egyébérték
isha egy iobjektum bizonyos típusú, pl: `if(ford is Car)
if (double.TryParse(Console.ReadLine(), out hoursWorked))
{
if (hoursWorked > 0)
{
//calc payment
if (hoursWorked > 40)
{
//calc overtime
double payAmount = hoursWorked * payRate + (hoursWorked - 40) * payRate * 1.5;
Console.WriteLine("Your payment is: " + payAmount);
}
else
{
double payAmount = hoursWorked * payRate;
Console.WriteLine("Your payment is: " + payAmount);
}
}
else
{
Console.WriteLine("No work = no money");
}
}
else
{
Console.WriteLine("BAD DATA FORMAT!");
}bővebben: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/switch
int caseSwitch = 1;
switch (caseSwitch)
{
case 1:
Console.WriteLine("Case 1");
break;
case 2:
Console.WriteLine("Case 2");
break;
default:
Console.WriteLine("Default case");
break;
}másik példa:
char ch;
Console.WriteLine("Enter a Character");
ch = Convert.ToChar(Console.ReadLine());
switch (Char.ToLower(ch))
{
case 'a':
Console.WriteLine("Vowel");
break;
case 'i':
Console.WriteLine("Vowel");
break;
case 'o':
Console.WriteLine("Vowel");
break;
case 'u':
Console.WriteLine("Vowel");
break;
case 'e':
Console.WriteLine("Vowel");
break;
default:
Console.WriteLine("Not Vowel");
break;
}fájl:looping
for (int i = 0; i < length; i++)
{
Console.Write(" :) ");
}ha a felététel igaz akkor teljesül, elöl tesztel
while (length > 0)
{
Console.Write(" :( ");
length--;
} int i = 5;
while (i<4)
{
Console.WriteLine("This is while loop ");
}hátul tesztel, ha a feltétel igaz akkor folytatja az ismétlést
do
{
Console.Write(" :/ ");
length++;
} while (length<5); do {
Console.WriteLine("This is a do while loop ");
} while (i < 4);
-15és+15között az x értéke ay = x^2egyenletrehogy beleférjen az ablakba lekicsinyítjük:
225 * x = 80=>x = .3555
for (int i = -15; i <= 15; i++)
{
var y = i * i * .3555;
for (int j = 0; j < y; j++)
{
Console.Write(" ");
}
Console.WriteLine("*");
}kimenet:
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
fájl: kiosk
Egy egyszerű programocska, választó menükkel, stb.
DateTime MyAge;
Console.WriteLine("Enter Your Age");
MyAge = Convert.ToDateTime(Console.ReadLine());
int years = Convert.ToInt32((DateTime.Now.Subtract(MyAge).TotalDays)) / 360;
Console.WriteLine("Your Age is " + years + "Years");
Console.ReadKey();Console.Readkey();- vár egy billentyűá leütésre és azt adja vissza, hasznos lehet program végére is
- egyszerű GUI példa: https://github.com/gabboraron/CSharp_alapok/tree/master/GUI-apps/first-v2/first-v2
- egyszerű webes program példa: https://github.com/gabboraron/CSharp_alapok/tree/master/GUI-apps/first-v2/first_web_app/first_web_app
- egy alap web böngésző Internet Explorer alapokon,
web_browser\web_browser\bin\Debug\web_browser.exe-vel futtatható: https://github.com/gabboraron/CSharp_alapok/tree/master/GUI-apps/first-v2/web_browser - digitális óra: https://github.com/gabboraron/CSharp_alapok/tree/master/GUI-apps/first-v2/digitalClock
- egy centiliter - liter konvertáló GUI alkalmazás: https://github.com/gabboraron/CSharp_alapok/tree/master/converter
- számológép program: https://github.com/gabboraron/CSharp_alapok/tree/master/GUI-apps/first-v2/szamologep
- matematikai műveletek végrehajtására program: https://github.com/gabboraron/CSharp_alapok/tree/master/GUI-apps/first-v2/szamologep%20-%20Copy
- térkép: https://github.com/gabboraron/CSharp_alapok/tree/master/GUI-apps/first-v2/map
- paint, fájlkezelés: https://github.com/gabboraron/CSharp_alapok/tree/master/GUI-apps/first-v2/paint
- ping-pong, programozott kilépés: https://github.com/gabboraron/CSharp_alapok/tree/master/GUI-apps/first-v2/ping-pong
- zenelejátszó, fájlkezelés, windows elemek kezelése: https://github.com/gabboraron/CSharp_alapok/tree/master/GUI-apps/first-v2/Zenelejatszo