Γεια χαρα νταμ. Το χομπι μου ειναι ο προγραμματισμος, ξερω αρκετες γλωσσες αλλα μαρεσουν δυο C# C++ με μεγαλυτερη προτιμηση στη πρωτη. Λεω να γραψω μερικα πραγματα που ξερω για τα βασικα της νετ. Ο λογος που θα τα γραψω δεν ειναι οτι το παιζω ξερολας, αλλα ρε παιδι μου, ειναι λιγα αυτα που εχουν γραφτει στα Ελληνικα περι .net (c#).
(Θα ηθελα συμμετοχη και απο αλλα μελη που ενδιαφεροντε για αυτη τη γλωσσα, δε νομιζω οτι ειμαι ο μονος στην Ελλαδα που εχει αυτο το χομπι)
Λοιπος ας αρχισουμε.
Μια γενικη εικονα της .net. Κυριο, τα παντα ολα ειναι System.Object (τα παντα ολα!), ο τροπος που επικοινωνει με το hardware ειναι τα winapi (+directx api), τελος η cs δε σου βγαζει asm αλλα IL (ilasm).
Διαφορες μεταξη class (object) & struct(ValueType) ειναι καθαρα allocator. Η class (object) παει στη heap και ο struct (ValueType) στη stack.
[Trick]
Εφοσον ο struct παει στη stack δε μπορει να παρει τη τιμη null. Πχ int i = null; //error . Τι μπορουμε να κανουμε αν για το χ ψ λογο θελουμε ενα struct να περνει τη τιμη null; απλο int? i = null ;//ok
[Tip]
Πως δουλεβει το foreach loop? Με interfaces, IEnumerator,IEnumerator<T>
[Tip]
Τι κανει το yield return? Επιστρεφει εναν IEnumerator<T> παραδειγμα
class Program
{
static void Main(string[] args)
{
foreach (var item in foo())
Console.WriteLine(item);
Console.Read();
}
static IEnumerable<int> foo()
{
for (int i = 0; i < 10; i++)
if (i % 2 == 0)
yield return i;
}
}
υγ: Επιστρεφει εναν Enumerator ο οποιος εχει ζυγους.
[Tip]
Indexer Ειναι κατι σαν τη property με διαφορα οτι φερνει προς array πχ
class Program
{
static void Main()
{
fee f = new fee();
f["prop1"] = "lalala";
f["prop2"] = "lololo";
Console.Read();
}
}
class fee
{
string property1 { set { Console.WriteLine("property1 updated! value:"+value); } }
string property2 { set { Console.WriteLine("property2 updated! value:" + value); } }
public string this[string property]
{
set
{
switch (property)
{
case "prop1": property1 = value;
break;
case "prop2": property2 = value;
break;
default:
break;
}
}
}
}
[Tip]
Extension method , το αγαπημενο μου. Εχεις καποιο ετοιμο object και θες να του βαλεις μια συναρτηση, τι κανεις(εκτος απο το να φτιαξεις μια helperclass)? Extension!
Η extension method πρεπει να ειναι σε μια static class, το object που θα παρει το extension πρεπει να βλεπει αυτη τη class. Πως γιατι και τι
class Program
{
static void Main()
{
X x = new X();
x.SayHello();
Console.Read();
}
}
//my object
class X { }
//my extension on A
static class ExA
{
public static void SayHello(this X x)
{
Console.WriteLine("Hello!!");
}
}
[Tip]
Anonymous type ειναι το αντιθετο απο το named type
Named type = class x{..}
Anonymous type = new{A=1,B=1.2,S="lol"};
class Program
{
static void Main()
{
var anonymous = new { Age = 90, LastName = "Mitsotakis" };
Console.WriteLine("Age:{0}, Last:{1}",anonymous.Age,anonymous.LastName);
Console.Read();
}
}
[tip] Παω για υπνους