Marcin Zajkowski PRO
Umbraco MVP x7 • The Busy Programmer • Senior Solution Architect / CTO / Country Manager @novicell • #umbraCoffee Co-Host • IT Consultant and Public Speaker.
Trener i Certyfikowany Master Umbraco
@ The Cogworks
Czarodziej od Treści i Wiedzy, Wódz Trenerów (CKO, CIO) / PedagoGEEK @ WOW School
Ja, 'bloger' @ udfnd.pl
Kuba Wojewódzki @ umbra.coffee
@zajkowskimarcin
Slack Devs PL: http://slackin.devstyle.pl/
Slajdy: https://slides.com/zajkowskimarcin/co-nowego-w-csharp-7-i-8/
public class GoldenThough1 : ITweetable {
}
public class GoldenThough2 : ITweetable {
}
install-package System.ValueTuple
(tylko dla .NET Framework < 4.7)
public interface ICanHasDefaultMembers
{
void FireDev();
void FireAllDevs()
{
foreach (var dev in theCogworks)
{
FireDev();
}
}
}
public class MySweetClassWhichIDontWantToModify : ICanHasDefaultMembers
{
public void FireDev()
{
// You know what to do :>
}
}
public interface ICanHasDefaultMembers
{
void FireDev();
void FireAllDevs()
{
foreach (var dev in theCogworks)
{
FireDev();
}
}
}
public class MySweetClassWhichIDontWantToModify : ICanHasDefaultMembers
{
public void FireDev()
{
// You know what to do :>
}
private void FireAllDevs()
{
// My private member
}
}
MySweetClassWhichIDontWantToModify myClass = new MySweetClassWhichIDontWantToModify();
myClass.FireAllDevs(); // Doesn't work because FireAllDevs() is private
ICanHasDefaultMembers myClassOnSteroids = (ICanHasDefaultMembers)myClass;
myClassOnSteroids.FireAllDevs(); // It works!
int i = 0; // I can't be null
int? i = null; // I can be null!
string s;
string? t;
t = null;
int i = t.Length; // Warning
if(t != null) {
int j = t.Length; // No warning - smart compiler!
}
if(!t.IsNullOrWhiteSpace()) {
int l = t.Length; // Warning!
int m = t!.Length; // I'm smarter than compiler, and DAMNIT, I don't have null here for sure! :>
}
string s; // Should never be null
string? s1; // Can be null
s?.Length; // Check this one for null, please!
s!.Length; // Don't check this, I'm smarter than you :)
async Task<bool> ThisIsWellKnownAndUsedTaskAsync(){
return true;
}
await ThisIsWellKnownAndUsedTaskAsync();
// ---------------------------------------------------
IAsyncEnumerable<T> willItBlowOrNotHmmmWeWillSee = ...
foreach await(var bang in willItBlowOrNotHmmmWeWillSee)
{
// Thread is not blocked and item is retrieved
// Move next when data is here!
}
Pull model zgoła odmienny od
modelu push w IObservable np.
public class SomeClassWhichNeedsToBeExtended
{
}
public static class SomeClassWhichNeedsToBeExtendedExtensions
{
public static T MethodName<T>(this SomeClassWhichNeedsToBeExtended instance)
{
return default(T);
}
}
What we're doing now...
extension MyClassExtension extends ClassToBeExtended
{
public int AddAnotherHead()
{
this.Heads++; // it call the current instance of MyClassExtension
}
public int Heads()
{
get { ... }
}
}
// --------------------------------------------------------------------
extension SomeComplexExtension extends MyClass : IMyInterface
{
...
}
C# in Depth book by J. Skeet (4th Edition - preorder)
https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-7
https://blog.xamarin.com/getting-started-c-7/
https://www.erikheemskerk.nl/csharp-7-0-improvements/
https://www.erikheemskerk.nl/c-sharp-7-1-polishing-usability/
https://www.erikheemskerk.nl/c-sharp-7-2-and-8-0-uncertainty-awesomeness/
https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-7-1
https://blog.jetbrains.com/dotnet/2017/10/25/c-7-0-7-1-support-resharper-pattern-matching-generics/
https://www.erikheemskerk.nl/c-sharp-7-2-and-8-0-uncertainty-awesomeness
https://channel9.msdn.com/Events/Build/2017/B8104
https://channel9.msdn.com/Blogs/Seth-Juarez/A-Preview-of-C-8-with-Mads-Torgersen (Thanks Mads!)
https://rubikscode.net/2017/10/23/c-8-the-shape-of-the-things-to-come/
public class GoldenThough3 : ITweetable {
}
By Marcin Zajkowski
Wielu programistów .NET nie przywykło (bądź nawet nie próbowało przywyknąć - #smuteczek) do stosowania wszystkich udogodnień, które udostępnione zostały nam w wersji 6 języka C#. Tymczasem na mapie wydanych wersji widnieje już wersja 7, 7.1 i 7.2, a na Githubie trwają burzliwe dyskusje na temat zakresu zmian w C# 8! Co nowego szykują nam twórcy języka? Czy powinniśmy obawiać się nadchodzących zmian i wyjścia poza strefę naszych programistycznych nawyków? Czy powinniśmy refaktoryzować nasze projekty, aby być zawsze na bieżąco w ramach platformy? Na te i inne pytania odpowiemy w trakcie tej prezentacji.
Umbraco MVP x7 • The Busy Programmer • Senior Solution Architect / CTO / Country Manager @novicell • #umbraCoffee Co-Host • IT Consultant and Public Speaker.