Coding Shorts: For The Record - Why You Should Use (Records in C#)

Sdílet
Vložit
  • čas přidán 19. 06. 2024
  • Records are here for C#! Are you confused by why they exist? I was too. Let's look at it:
    00:00 - Introduction
    00:28 - Getting Started
    03:03 - Using Records
    04:30 - Simplified Syntax
    05:35 - Immutability
    08:33 - Inheritance in Records
    10:05 - Wrapping Up
    Source Code: github.com/shawnwildermuth/co...
    If you like this video, you might like other videos in my Instructional Videos:
    - • Instructional Videos
    You can hire me too! You can reach me at my new website:
    - shawn.wildermuth.com
  • Věda a technologie

Komentáře • 61

  • @raphaellukas3328
    @raphaellukas3328 Před 11 měsíci +4

    When I was looking for a video to explain the C# record, I knew I was in good hands. Always to the point, no big talk around it. Many greetings from Germany

  • @godfathermikal
    @godfathermikal Před rokem +3

    Sweet. That makes sense. Didn't really see how record was useful, but this makes sense. Thanks!

  • @timothyvandyke9511
    @timothyvandyke9511 Před rokem +5

    I would absolutely love if this encourages people to put a bunch of (related) types into the same file so we don't get a bajilllion files just for simple types.

  • @henrikchristensen65688

    I love your short but very informative videos! You just got a new subscriber!

  • @DmitriyBelous
    @DmitriyBelous Před rokem +1

    Great explanation, thanks!

  • @NoonKnite
    @NoonKnite Před rokem

    great explanation! i've struggled with how classes and recs are different, so this really helped a lot.

  • @jasondelauro
    @jasondelauro Před 3 měsíci

    You have an excellent concise teaching style.

  • @matadorso
    @matadorso Před rokem +1

    Cool video 👌

  • @samwalter17
    @samwalter17 Před 2 měsíci

    Brilliant video, that was so concise and informative, thank you.

  • @AlexapolloRodopoulos
    @AlexapolloRodopoulos Před 2 měsíci

    Amazing explanation and demonstration keep it up!

  • @jemakrol
    @jemakrol Před 5 měsíci +2

    First time visitor. Senior dev that just wanted to see some different explanations on the topic in the context on how to best describe it.
    You explain in a concise and pedagogical way. You do this without all the the Bells and Whistles that usually comes with CZcams videos. I hesitate to search for explanations in video format because it often comes with too much distraction and ambition. Motivated or not, things I didn't want. This, however, really gets to the point in a straight forward and relaxing manner. Nice!

  • @tytz100
    @tytz100 Před 9 měsíci

    this was the clearest explanation video I've ever seen in a while. GJ!

  • @JohnSmith-op7ls
    @JohnSmith-op7ls Před 4 měsíci +1

    You should mention how and when a record will be allocated to the heap vs stack as this is important for performance and GC. Also, go into when and how copying of a record instance is a fill/deep copy, meaning no references are reused, and when it is a shallow copy, meaning value types are copied but reference types only have the pointer copied.

    • @stxnw
      @stxnw Před 3 měsíci

      this is standard knowledge so there’s no need to re-explain this.

  • @D3VW1Z4RD
    @D3VW1Z4RD Před 9 měsíci

    Good video, and ur voice is so relaxing sir.

  • @user-jq6uh5vu2l
    @user-jq6uh5vu2l Před rokem

    Thanks this was great.

  • @pukey3226
    @pukey3226 Před 8 měsíci

    Thanks Shawn

  • @TheAndronKolaider
    @TheAndronKolaider Před 2 měsíci

    The best explanation you can ask for

  • @officemishler3364
    @officemishler3364 Před rokem

    Video and audio quality are ridiculously good. Need S Dubs in the highest def possible

  • @williamliu8985
    @williamliu8985 Před rokem +2

    Hi Shawn, could you give a video talking about the "readonly record struct"? The name seems a bit wired, and it is rarely mentioned. What is its application scenario?

    • @fifty-plus
      @fifty-plus Před 5 měsíci

      It's well documented on the Microsoft Learn site.

  • @zaharivaklinov
    @zaharivaklinov Před rokem +2

    Thanks for this!
    But what's your take on creating DTOs with records instead of with classes?

    • @jonathansaindon788
      @jonathansaindon788 Před rokem +1

      This is probably a good fit, but to me the best use case for records is multithreading. Since you can’t edit them after the fact, it forces you to use them in a thread-safe manner.

  • @LOL-cp6js
    @LOL-cp6js Před 8 měsíci

    helpful👍🔥

  • @peterstangelo8627
    @peterstangelo8627 Před rokem

    Thanks for doing these insighful coding shorts. I noticed you use a shortcut to run the 'dotnet.exe' -was it a case of just making a copy and naming it 'n.exe' (in the same folder)?

    • @swildermuth
      @swildermuth  Před rokem +1

      I got it from here: github.com/faniereynders/dotnet-sdk-helpers
      I renamed their dot.cmd to n.cmd

    • @peterstangelo8627
      @peterstangelo8627 Před rokem

      @@swildermuth thank you

  • @rogerstich7603
    @rogerstich7603 Před 6 měsíci

    First of all, even if i point out a flaw, i really love your shorts, this video helped me alot in finding a simple way to explain this construct to my trainees and junior devs.
    The flaw im talking about starts at 1:50 of your video.
    There you are telling that you make a copy of the product by writing this:
    var product2 = product;
    But thats not true, you dont make a copy you just assign the pointer to another variable, you copied the pointer, not the object.
    You can test it by using this Code:
    var product2 = product;
    product.Description = "Description of Product";
    Console.WriteLine($"Product1: {product.Description}");
    Console.WriteLine($"Product2: {product2.Description}");
    If i had a Copy, then only the first Console WriteLine should contain the Description string "Description of Product".
    But both does and thats because those variables actually do point to the same object and for that makes your explaination later with equals a bit weird.

    • @swildermuth
      @swildermuth  Před 6 měsíci +1

      I didn't mean to imply that. My bad.

    • @rogerstich7603
      @rogerstich7603 Před 6 měsíci

      @@swildermuththanks for the response

  • @49riddickful
    @49riddickful Před rokem

    How is that last bool method you wrote a part of the record above? What indicates that?

    • @swildermuth
      @swildermuth  Před rokem

      It is just like a class declaration, you can add members (in this case a method) in the body of the record. I think that's what you're asking.

  • @Elilmu_Nur
    @Elilmu_Nur Před 3 měsíci +3

    You didn't really say why we should use records but thanks anyway.

    • @DamienSawyer
      @DamienSawyer Před měsícem

      At 7:55 he discusses when he uses them and (perhaps not exhaustively), why.

  • @jameshancock
    @jameshancock Před rokem +2

    What I really want to do is make all of my DTOs readonly record struct. But it doesn't work in a number of cases including [AsParameter].

    • @swildermuth
      @swildermuth  Před rokem

      Not sure why that would be. Can you explain? I'm curious. Difference between struct and record is inheritance (though likely not that useful but good to know).

    • @jameshancock
      @jameshancock Před rokem +1

      @@swildermuth One is on the heap the other isn't. Correct usage of structs instead of classes in high volume systems minimizes garbage collection.
      It's unfortunate that you can't inherit or at least say "implement identical properties" of a struct, but when using protobuf of messagepack or even graphql which generate DTOs from other formats, that doesn't really matter, and the perf improvement is pretty nuts.

  • @henrik3098
    @henrik3098 Před 8 měsíci

    thanks my amercian bro

  • @robadobdob
    @robadobdob Před měsícem

    You can also mutate the record back onto itself e.g. product = product with { Price = 1.99m }
    I use this in Fluxor where the current state is passed into a reducer method.

    • @swildermuth
      @swildermuth  Před měsícem

      Technically true, but it is new copy (a new reference). Right?

    • @robadobdob
      @robadobdob Před měsícem

      @@swildermuth yeah correct, it creates a new copy and assigns it back to the variable.

  • @ashimov1970
    @ashimov1970 Před rokem

    how do I convert records into classes and vice versa?

  • @Ben-nc9qw
    @Ben-nc9qw Před měsícem

    Are you the voice of Lester in GTA5?

  • @0XAN
    @0XAN Před 23 dny

    nice explication man; but nothing will be fast as a struct with aligned fields; my feeling is that C# is becoming a language for wankers sadly

    • @swildermuth
      @swildermuth  Před 23 dny

      That's aggressive. Sure, struct with aligned fields is faster, but to what end? Faster != better code in many cases. Sure, you're building a real-time system, every cycle counts; but the ability to do immutable data can make code better and more thread safe. If you're optimizing for cycles, but most of your work is on the network, your time savings is swallowed up in the aggregate. Let me guess, non-wankers write in Rust or Go?