Every single feature added in C# 11

  Рет қаралды 112,261

Nick Chapsas

Nick Chapsas

Күн бұрын

Пікірлер: 186
@Integer0
@Integer0 2 жыл бұрын
You missed one interesting feature: you can now declare ref fields inside a ref struct. So you can write a new type like Span etc
@barmetler
@barmetler 2 жыл бұрын
My god, I can't even imagine how people even _compare_ java to this language. C# is on an entirely different level. There are things in C#11 where the developers of java don't even know what they are. My boss absolutely loves Java and it's so frustrating. We don't have access to generics (T.class, instanceof, new, etc), no operator overloading, no extension methods, no namespaces, no value types, everything has to be boxed, all function calls are virtual, it doesn't compile to actual machine code, there are no properties, no pattern matching, no nameof, no spans, no linq query syntax, no async/await, no generator functions, no partial classes, records were an afterthought that don't really help anything, reflection is half as powerful, no assembly-level visibility, no linq expression tree compilation, I could go on for hours. string interpolation, better string literals, dynamic type (for easier reflection), multiple generic classes with the same name but different generic count, no tuples, no named tuples, no initialization statements, no references, no top level main function, functions aren't first-class members, no local functions, just one class per file,
@umilmi81
@umilmi81 2 жыл бұрын
I have purchased courses from both Nick Chapsas and Tim Corey and Nick's courses are head and shoulders above Tim's. Nick talks at normal speed in his courses, provides the source code to follow along, and goes deep into the technical details of the topic. The courses are priced the same as a good book. They are a great value. Looking forward to more courses. I'd love a course on CI/CD with Azure and good NuGet package making practices.
@TheFeaz
@TheFeaz Жыл бұрын
This is an interesting contrast between these two content developers (Nick and Tim). I've kind of made the same observation myself, and I'm curious to know what it is about Tim's courses and content that you don't like? I'm a content creator myself and looking to develop some courses as well from my perspective and experience (25 years) as a .net developer. It's the first public critique of Tim's content I've seen so I'm curious to know if any other developers make the same observations I have. FULL DISCLOSURE: I'm not trying to incite unfair criticism of Tim or his content. One thing I will say is that this space is big enough for multiple content providers, and different people learn differently. I like Nick's content personally because the cadence works well (for me) as an experienced developer who wants to get down to the nitty-gritty of how it works.
@olivervalienteoliva4335
@olivervalienteoliva4335 Жыл бұрын
This video was an impressive introduction to a lot of new features, most of this really wanted for the community. Amazing video, thanks you for sharing.
@NicholasReaves
@NicholasReaves 2 жыл бұрын
Generics on attributes and required members are what I am personally looking forward to. I can write cleaner OO code that end users are less likely to be able to misuse :)
@foamtoaster9742
@foamtoaster9742 2 жыл бұрын
This video is truly awesome. The perfect amount of detail to understand what the features do without making it way too long.
@gawiga
@gawiga 2 жыл бұрын
Awesome summary! Save me a lot of time!
@justinian.erdmier
@justinian.erdmier 2 жыл бұрын
My favorite new feature is the required' keyword with the new raw string literals as a close second. As someone who doesn't really write library/package code, only front-end consumed code, the other features don't really apply; but I love the work that the C# design team has done!
@dlhsnbrn1275
@dlhsnbrn1275 2 жыл бұрын
static abstract interface members are my favorite by far. I cannot count how many times I thought "this code would be much nicer if this was possible". Second is raw string literals, because I have tons of tests that need constant XML or JSON values.
@tetheredsun950
@tetheredsun950 2 жыл бұрын
Static abstract interface members, how long have I been waiting for you. The System.Numerics namespace is full of yummies.
@CharlesBurnsPrime
@CharlesBurnsPrime 2 жыл бұрын
This video is so useful as usual. A similar video demonstrating all new features of C#9, 10, etc. Would also be very useful. I can see that you like to focus on new features, but you would be surprised how many teams still use. NET all the way back to 4.0. Even Microsoft is still moving code from ancient releases. These many folks could use a series of such videos as a single point of reference as they transition.
@robertcahoon5278
@robertcahoon5278 2 жыл бұрын
Awesome content. So useful. Any chance you can do similar summaries for earlier versions for those catching up? I find it incredibly useful in keeping up to date. Thanks again for such great content. 😎
@juergenzhang9133
@juergenzhang9133 2 жыл бұрын
I had the same thoughts. It would be really great to have the whole C# development history in a series of such videos! Also thanks for this pearl of a compact video with lot of content.
@rankarat
@rankarat 2 жыл бұрын
kzbin.info/www/bejne/jJfXZYR6itWsjbs this is for C# 10
@rans0101
@rans0101 2 жыл бұрын
Yes please, i was thinking the same
@nilscoussement
@nilscoussement Жыл бұрын
This one video is worth so much for people who want to move to c# 11 Thx a lot man, you helped me more then you can believe 😄
@DevonLehmanJ
@DevonLehmanJ 2 жыл бұрын
I was really hoping that the `required` keyword had more use cases. I was thinking it'd be awesome if DI could use them for property injection- if the field is specified as `required`, then when the DI container tries to build the type, it should try to populate those values and throw if it doesn't have a registration for it. This would mean we could get rid of constructor injection which would be awesome!
@NoGamer256
@NoGamer256 2 жыл бұрын
Well it depends whether you can check the field for required keyword using reflection API in .NET 7. Can you?
@marknn3
@marknn3 2 жыл бұрын
@@NoGamer256 Yes, the compiler adds a RequiredMemberAttribute to the property
@buysmartter
@buysmartter 2 жыл бұрын
Thank you for the videos. I found out about you a few weeks ago and since then I am watching all of your videos and enjoy them very much!
@stevekeith9507
@stevekeith9507 2 жыл бұрын
Great job Nick. I like 3 double quotes and pattern matching feature in C# 11 becuase they are "common man" features!
@renetittel17
@renetittel17 2 жыл бұрын
Danke!
@srd8580
@srd8580 2 жыл бұрын
Great video, as always, Nick! Static abstract members by far will be my most-used feature here. I've wanted that more times than I can count going all the way back to .NET Framework days. The extended nameof scope will also be handy, my team ironically just attempted that the other day under C# 10 (obviously to no avail), so good to know it'll be there next time!
@RaistlanCE
@RaistlanCE 2 жыл бұрын
Scoped (and ref fields), easily. A big addition to the ref/ref readonly/in parameter toolkit.
@diadetediotedio6918
@diadetediotedio6918 2 жыл бұрын
I really do love list patterns for parsers, a very useful feature
@Explorest
@Explorest 8 ай бұрын
This was a great video as a one stop shop for every new feature in C#11 . I wonder whether you did something similar for C#12 ? This is a wonderful format for people who don't have time to get up to speed with a whole version update in C#.
@AlexFeature
@AlexFeature 2 жыл бұрын
Generic attributes are probably the coolest addition. Thanks for the vid Nick, awesome stuff as usual.
@diadetediotedio6918
@diadetediotedio6918 2 жыл бұрын
21:30 The reason you need to initialize all values first is because structs are always located linearly in memory, and are not reset by default (as this has a performance cost), so C# gives you the opportunity to either use them without initialization default (and save a few nanoseconds, which can be relevant in extremely performance-hungry code), or initialize them all to ensure consistency
@meirkr
@meirkr Жыл бұрын
The "required" keyword seems to be the most benefitial and to be used. Tx.
@nandkishorsonwale
@nandkishorsonwale 2 жыл бұрын
Thanks for great video. My favourite features are list patterns, required member and pattern machining on spans...
@TOMRUS88
@TOMRUS88 2 жыл бұрын
ref fields and ref scoped are my favourites!
@cdrbvgewvplxsghjuytunurqwfgxvc
@cdrbvgewvplxsghjuytunurqwfgxvc 2 жыл бұрын
Woha, so ready for c# 11! Techempower benchmarks on the release blog post for net7.0. Love it. They became household name quickly
@jongeduard
@jongeduard 2 жыл бұрын
27:15 Well, why this is the case is quite understandable when you think about how a value type like a struct is stored: directly within the current scope, since no managed reference (pointer) in memory is made. Since you can never use an uninitialized variable in C#, it inevitably means that the struct has to be FULLY initialized before use, i.e. all fields must have been assigned with something. The compiler just wants to ensure this. Requiring you to assign it was needed, but assigning fields with a default value is also a solution. But it must be done in some or other way.
@mickecyborg
@mickecyborg 2 жыл бұрын
Thank you for your content. I am working as a .NET developer primarily using VS2022 and have many times referred to your content as best practice. I would like to see a video how you have configured Visual Studio Code to be so fluent when running and debugging projects. What plug-ins are you using. How have you configured your environment? How do you configure VS Code to have the features you so fluently use in your videos?
@ArafatTehsin
@ArafatTehsin 2 жыл бұрын
Love it Nick. Thanks for sharing it.
@VitaNova83
@VitaNova83 2 жыл бұрын
Lots of exciting stuff. Required members are going to be so nice but I've been looking forward to list patterns since it was pushed right from the original pattern matching release.
@borsuk7667
@borsuk7667 2 жыл бұрын
required keyword will be better if it'll be default for records So you can created record either by ctor or by object initializer
@luanalbuquerque5073
@luanalbuquerque5073 2 жыл бұрын
This is the video that i was watting for
@lucaslinhares4071
@lucaslinhares4071 2 жыл бұрын
I love your videos, I can always improve my projects with them + it's keeps me updated with every release.
@leondepaauw
@leondepaauw 2 жыл бұрын
Thanks for another amazing video. I'll be using the raw string literals a lot and the file scoped types in some cases.
@francoislepron2301
@francoislepron2301 2 жыл бұрын
Awesome video as usual, and I do appreciate this presentation of the new features as you did it with examples.
@xlerb2286
@xlerb2286 2 жыл бұрын
Good video as always. Generic math would have been a big help to me at my prior job. Most of those look pretty useful though. No great "oh my gosh, this changes everything" features. But lots of little useful additions.
@MrFaciio
@MrFaciio Жыл бұрын
Amazing video, thanks for shortcut new features!
@amuuuinjured
@amuuuinjured 2 жыл бұрын
I will use Generic attributes and Required members. Maybe file scoped types will become handy too. Thanks, for video.
@josedejesusbarajaschavez1374
@josedejesusbarajaschavez1374 2 жыл бұрын
Awesome video. I think at least the half of the new features will be useful for me, so let's see. Thanks Nick :)
@KingOfBlades27
@KingOfBlades27 2 жыл бұрын
String changes will be so useful and needed. Also thanks for the video Nick! You are doing God's work here 💪
@HimmDawg
@HimmDawg 2 жыл бұрын
I'm disappointed that semi-auto properties were not added in C#11 :( that was the feature I was looking forward to most
@Uebagi
@Uebagi 2 жыл бұрын
7:45 this change alone is worth it for me. I have a writer to a nosql where i have a standardized data contract, before the Typing and params was overly complex and ugly. Now I can make my code way cleaner 😎
@TheOmokage
@TheOmokage 2 жыл бұрын
Can we now remove [Required] attribute from Fields and replace that to "required member" ?? Do it will work with Json serialisation and ModelState in WebApi ?
@muhamedkarajic
@muhamedkarajic 2 жыл бұрын
As usual to the point, clear. Great video!
@matthewlloyd3255
@matthewlloyd3255 2 жыл бұрын
I was employed as a programmer for a bit more than a decade and use Java, Javascript and C# reasonably often. While all the many language features each of these languages have to offer is great - because I'm often porting programs between each of these 3 languages the featureset of the engines and code I write remains extremely simple. Almost everything I write is single threaded, uses only basic data types (floats, ints, strings and doubles), struct like objects and simple arrays of data types and structs/objects. I find that by limiting my code to only the most basic features of the language I can port from one to another extremely easily - plus my programs remain very simple to read and understand.
@verzivull
@verzivull 2 жыл бұрын
Nick, you're awesome!
@dev-skills
@dev-skills 2 жыл бұрын
Raw string literals very well explained.
@PanzerFaustFurious
@PanzerFaustFurious 2 жыл бұрын
required keyword is definitely my favorite , just wish you could also do null/argument checking with auto-properties.
@alexpaskal8345
@alexpaskal8345 2 жыл бұрын
i was waiting for exactly this video!
@TheTempterable
@TheTempterable 2 жыл бұрын
Finaly! Interface for countable types!! Yes!!!
@geraldmaale
@geraldmaale 2 жыл бұрын
happened to be idle, lets learn 😊
@F1nalspace
@F1nalspace 2 жыл бұрын
Feature 7 is awesome and will save us a ton of headaches with our special signal math routines. We finally can drop that bad template generator code for our special number types and methods like Min/Max/Avg, etc.
@Daanik8
@Daanik8 2 жыл бұрын
Very good video! Thank you Nick
@diego_samano
@diego_samano 2 жыл бұрын
Raw literals will be very useful for inline values when creating unit testing or initial setups and List patterns looks great. But .Net 7 is a great release with a bunch of cool features.
@Zainjerr
@Zainjerr 2 жыл бұрын
This is exactly what I needed Thanks a ton mate!
@alexclark6777
@alexclark6777 2 жыл бұрын
Started using static abstract members on interfaces a couple months ago via the preview feature, but was looking forward to generic math becoming generally available - the combination of both has severely reduced boilerplate in a library I'm working on. Definitely looking forward to the 'scoped' video. I'm guessing it's something similar to lifetime annotations in Rust, albeit slightly more coder-friendly.
@kgnet8831
@kgnet8831 2 жыл бұрын
list patterns (are also cool for pattern matching in switch), static abstract, string interpolation
@moditrix
@moditrix 2 жыл бұрын
One of the projects I work on has a large number of unit tests that use static json as input, which I get from real data. Copying such strings as json is very annoying. So I will use raw string literals immediately and massively. Static virtual interfaces have been missing in C# for a long time. Required members is another feature that I very much welcome. And the last feature that I will definitely use right away is Generics on attributes.
@TheOmokage
@TheOmokage 2 жыл бұрын
Do we have the possibility to use the list patterns functionality without expressions using 'is' ? = ))For example like this: string[] people = { "Tom", "Bob", "Sam", "Kate", "Alice" }; people[1..4 string[] firstToFouth, var fifth, .., var last]; Console.WriteLine($" {fifth} {last}");
@TheOmokage
@TheOmokage 2 жыл бұрын
Is there an analogue of this functionality? This looks like a better version of range and indexes
@nanvlad
@nanvlad 2 жыл бұрын
Good video. Did they add keyword 'field' in this version to reduce private field declaration?
@nickchapsas
@nickchapsas 2 жыл бұрын
The field keyword didn’t make it in the full release
@sanjayidpuganti
@sanjayidpuganti 2 жыл бұрын
That was initially planned for C#11 but now it is planned for C#12
@MegaJoka100
@MegaJoka100 2 жыл бұрын
@@nickchapsas That means no semi auto implemented properties? That's sad, was really looking forward to this.
@lordmetzgermeister
@lordmetzgermeister 2 жыл бұрын
@@nickchapsas big sad
@pilotboba
@pilotboba 2 жыл бұрын
For sure required fields. Pattern matching is nice, but can get a little terse and lower comprehension because you have to "compile" in your head what it's doing.
@sDiovliFR
@sDiovliFR 2 жыл бұрын
Great video! On 21:46 you have IL Viewer, but it shows "High-Level C#". What plugin is that?
@nickchapsas
@nickchapsas 2 жыл бұрын
It’s not a plug-in. It’s a new feature of Rider’s new version. It’s amazing!
@MrIsrael3000
@MrIsrael3000 2 жыл бұрын
Raw string literals, patterns for numeric values, abstract math, scope for name of.
@xavier.xiques
@xavier.xiques 2 жыл бұрын
Good video, thanks Nick
@benjaminclehmann
@benjaminclehmann 2 жыл бұрын
I'm very interested what happens what happens if you keep a reference to a value passed by the `scoped` keyword past the end of it's lifetime. Does it extend the lifetime by shifting it to the heap? Does it refuse to compile? Does it just let the reference dangle? Is it guaranteed to throw if you attempt to use the dangling reference, or are you just in UB land?
@limbique
@limbique 2 жыл бұрын
Great content. Thank you!
@dmitrykim3096
@dmitrykim3096 Жыл бұрын
Honestly some of c# syntax sugar is making things less and less readable.
@omarjuul
@omarjuul 2 жыл бұрын
15:18 isn't it technically more correct to use `AdditiveIdentity` here? Is there ever a difference between `Zero` and `AdditiveIdentity`? Why did the design team add both?
@BodenUnits
@BodenUnits 2 жыл бұрын
It is :) Well technically 'Zero' is a property that returns something that resembles our idea of 0 for any Implementation of the INumberBase interface. But not every construct that supports addition (by implementing IAdditionOperators) will also implement INumberBase. IAdditiveIdentity is its own interface (both implemented by INumberBase) as well. So you can define the addition operator and the additive identity without having to implement all number related things. Think of something like a matrix, you would not want to be in the position to implement the IsEvenInteger method on that, how would you answer that. But you could still implement IAdditionOperators and IAdditiveIdentity for a matrix class. Matrices are also an example where 'One' and MultiplicativeIdentity are usually not the same, since in my opinion 'One' should be a matrix with ones everywhere, whereas MultiplicativeIdentity is the Identity matrix with ones only on the main diagonal. TL;DR: if you just want to calculate a sum, you should restrict the generic type to IAdditionOperators and IAdditiveIdentity, and those only implement the + operator and AdditiveIdentity, not Zero
@FireDragon91245
@FireDragon91245 2 жыл бұрын
my vavorit is INumber but what i will use the most is probaply """ this """;
@renefuller9241
@renefuller9241 2 жыл бұрын
So, List Patterns can be used to search for entire key-values in a hashtable, instead of the Unix regular expressions? As long as you know what pattern you're looking for (which you do since you are writing the code, if you get an unexpected result you throw an exception)
@Jochinator2
@Jochinator2 2 жыл бұрын
Required members are my favorite new feature
@gronkymug2590
@gronkymug2590 2 жыл бұрын
Raw string """xy"xh""" is handy but what one has to do to have " at the end or beginning of the string? :D
@vorontsovru270895
@vorontsovru270895 2 жыл бұрын
21:40 How did you make High-level C# display in IL Viewer?
@nickchapsas
@nickchapsas 2 жыл бұрын
It’s a new Rider feature
@danilonotsys
@danilonotsys 2 жыл бұрын
Hi Nick. Would you be interested in making a video about the performance improvements in EFCore 7? Maybe with a comparison with Dapper and ADO?
@js6pak
@js6pak 2 жыл бұрын
lowered C# viewer in rider is so nice, only JIT asm viewer is left now and sharplab not needed anymore
@oscareriksson9414
@oscareriksson9414 2 жыл бұрын
I like the using spans for strings things. And all the span things. Raw string pretty cool. I guess the interface stuff is pretty cool too.. But couldn't it be done with abstract classes since 20 years or so ago? I mean they need to be implemented by the implementing types still? Am I missing to understan something important? :)
@Denmaverick39
@Denmaverick39 2 жыл бұрын
Raw string literals for unit testing
@autoeggnet7192
@autoeggnet7192 2 жыл бұрын
Is there any mention of performance improvement or benchmark?
@shaunhunterit342
@shaunhunterit342 Жыл бұрын
What IDE is Nick using here?
@salimanahmad5352
@salimanahmad5352 2 жыл бұрын
Amazing video has there any other video like C# 1 feature C# 2 feature and so on
@Akumasama
@Akumasama 2 жыл бұрын
Omg that INumber interface No more switching on the type of input, fuck yes.
@matthewheys6611
@matthewheys6611 2 жыл бұрын
Is this restricted to Net7 or can I use some or all of these in Net6 as well? We are keeping to LTS versions at work.
@nomadshiba
@nomadshiba 2 жыл бұрын
this sound like microsoft moving features from typescript to c# and also taking inspirations from unity dots c# is getting better and better wish there was version of it that will force you to write optimized code by using new ways of doing things
@mariocamspam72
@mariocamspam72 2 жыл бұрын
the notification got me excited
@Ulfius1984
@Ulfius1984 Жыл бұрын
How do File Scoped Types work with unit testing?
@ashimov1970
@ashimov1970 2 жыл бұрын
Will List Pattern matching work for object lists/arrays?
@christopherhume1631
@christopherhume1631 2 жыл бұрын
For me, List Pattern Matching and Generic Math are the most interesting features by far. Though Raw String literals are not particularly interesting, this feature will likely see widespread adoption. BTW, I wish the structured @parameter syntax for Serilog played together better with interpolated strings. UTF-8 Literals are intriguing; but this feature seems a bit obscure. I am not yet convinced this feature will have much utility. What is the reason rollout of Semi-Auto Properties (a.k.a., the field keyword) continues to be delayed? Perhaps some found it objectionable.
@iGexogen
@iGexogen 2 жыл бұрын
Very useful video, thanks. But I want to aware unexpirienced developers about first example - coooking xml or json strings by hand is a bad practice. Dont do it in your projects, take it like generic example, not a real case, or you will waste time inventing yet another bicycle (buggy xml/json writer).
@nickchapsas
@nickchapsas 2 жыл бұрын
It is meant to be taken as a generic example, not as a real usecase
@qj0n
@qj0n 2 жыл бұрын
For me, the only place I've put xml or json in code as string were tests. But for that - very handy to place it in tests to test your code with production data. Unit now you either accepted the dirty looking json-in-string, or you put it in separate file to load in test. Now putting it in code is way nicer
@iGexogen
@iGexogen 2 жыл бұрын
@@nickchapsas I've notived it was a bit closer to real life than other really generic examples. I just wanted to beware anybody who could potentially think you use it in production code.
@Michal_Peterka
@Michal_Peterka 2 жыл бұрын
List pattern matching is first C# pattern matching where it is nicer way than in F#.
@Imploser
@Imploser 2 жыл бұрын
field keyword is still in preview?
@KeithPrice-OurBusinessHero
@KeithPrice-OurBusinessHero 2 жыл бұрын
Did I misunderstand? I thought I heard in the video that you'd have links to the detailed videos of each feature in the description. I'm not seeing that.
@JacobSilvia
@JacobSilvia 2 жыл бұрын
So excited about generic attributes.
@yoanashih761
@yoanashih761 2 жыл бұрын
What I like the most is the performance boost in C#11.
@virabhadra2
@virabhadra2 2 жыл бұрын
It can be a confusion by code reading, when we use a public class based on a file interface, because of need to keep in mind where the class was declared. Looks like it's too flexible, or I'm wrong.
@theMagos
@theMagos 2 жыл бұрын
I'm still waiting for extension-everything, and hopefully getting rid of opening up entire namespaces just to use them
@Morten746
@Morten746 2 жыл бұрын
I remember something about a 'field' keyword or something that could be used to avoid private backing fields. What happened to that?
@nickchapsas
@nickchapsas 2 жыл бұрын
It was dropped. Maybe we’ll see it in the future
@Morten746
@Morten746 2 жыл бұрын
@@nickchapsas Man that sucks. I was really looking forward to that. Hopefully it'll be back for the next version.
@krzysztofzon8661
@krzysztofzon8661 2 жыл бұрын
Generics on attributes ❤
@Tsunami14
@Tsunami14 2 жыл бұрын
For 11 (auto default structs), why would you do that? Seems like an easy way for a bug to leak through as an uninitialized value. At the very least, change it to a warning?
@GameRocker
@GameRocker 2 жыл бұрын
Can you explain more about the "Improved method group conversion to Delegate" and why is a lambda faster than a normal method when the lambda method will be boxed? I thought the opposite was true so I avoided using lambdas anywhere in my code
@MrBunt
@MrBunt 2 жыл бұрын
He has a video on his channel, titled "The C# 11 fix you didn’t know you needed", where he explains it in detail and shows benchmarks and everything
@phizc
@phizc 2 жыл бұрын
Basically, the lambda is cached in a static variable, while the method group recreates a delegate on every invocation.
@GameRocker
@GameRocker 2 жыл бұрын
@@MrBunt Thanks will look for the video
The weirdest way to loop in C# is also the fastest
12:55
Nick Chapsas
Рет қаралды 255 М.
What are record types in C# and how they ACTUALLY work
15:36
Nick Chapsas
Рет қаралды 124 М.
My 10 “Clean” Code Principles (Start These Now)
15:12
Conner Ardman
Рет қаралды 318 М.
Every feature added in C# 10 with examples
15:59
Nick Chapsas
Рет қаралды 125 М.
Writing C# without allocating ANY memory
19:36
Nick Chapsas
Рет қаралды 154 М.
151. How Do I Become a C# Expert?
14:29
IAmTimCorey
Рет қаралды 29 М.
I Hacked Diablo II To Use Modern Graphics
13:16
Nathan Baggs
Рет қаралды 382 М.
Don't throw exceptions in C#. Do this instead
18:13
Nick Chapsas
Рет қаралды 265 М.
The CORRECT way to implement Retries in .NET
17:01
Nick Chapsas
Рет қаралды 89 М.
Every Programming Language Ever Explained in 15 Minutes
15:29
Flash Bytes
Рет қаралды 368 М.