W tym poście przedstawione zostaną niektóre, mniej popularne konstrukcje C#, które warto znać i które często mogą ułatwić życie.
- default - słowo kluczowe, które zwraca wartość domyślną dla każdego typu (zawsze null dla typów referencyjnych, dla ValueTypes wartości te zdefiniowane są w specyfikacji języka
public class defaultKeyword { public static T GetDefaultValue<T>() { return default(T); } }
Console.WriteLine(defaultKeyword.GetDefaultValue<int>()); Console.WriteLine(defaultKeyword.GetDefaultValue<DateTime>()); //zwroci null, wypisze pusty string Console.WriteLine(defaultKeyword.GetDefaultValue<defaultKeyword>());
- volatile - obiekt może być modyfikowany przez wiele wątków jednocześnie. Obiekt taki nie jest poddawany optymalizacji kompilatora, który domyślnie zakłada, że dostęp do obiektu z pojedynczego wątku
- implicit generics - kompilator w przypadku metod generycznych może wywnioskować typ po argumencie
public static void Print<T>(T instance) { Console.WriteLine(instance); }
//implicit generics implicitGenerics.Print(new ASCIIEncoding()); //nie trzeba pisac //implicitGenerics.Print<ASCIIEncoding>(new ASCIIEncoding());
- @ - pozwala używać słów kluczowych C# w miejscach, w których normalnie jest to niedozwolone, np jako nazwy zmiennych
//@ character string @string = "string"; Console.WriteLine(@string);
- checked - używany do kontroli działań arytmetycznych, w których może nastąpić przepełnienie, gdy operację oznaczymy jako checked i przepełnienie wystąpi, rzucony zostanie wyjątek, gdy oznaczymy ją jako unchecked, wartość zostanie wyliczona przy uwzględnieniu "przekręcenia licznika"
//checked unchecked short x = 32767; // 32767 is the max value for short short y = 32767; try { int z1 = checked((short)(x + y)); //will throw an OverflowException Console.WriteLine(z1); } catch (Exception e) { Console.WriteLine(e.Message); } int z2 = unchecked((short)(x + y)); // will return -2 Console.WriteLine(z2);
- static constructor - wywoływany automatycznie raz, przed tym, gdy pierwsza instancja jest utworzona, bądź przed stworzeniem pierwszej referencji do statycznego pola / propercji, gdy żadna z tych okoliczności nie zajdzie, konstruktor nie zostanie wywołany
- params - umożliwia wywoływanie funkcji ze zmienną liczbą argumentów tego samego typu
public class paramsKeyword { public static void Sum(params int[] values) { Console.WriteLine(values.Sum()); } }
//params Console.WriteLine("params"); paramsKeyword.Sum(1,2,3); paramsKeyword.Sum(1,2,3,4,5);
Brak komentarzy:
Prześlij komentarz