C# Abstract Classes - What They Are, How to Use Them, and Best Practices

Поделиться
HTML-код
  • Опубликовано: 19 июн 2024
  • I get asked about abstract classes a lot. What they are, how they work, and why you should know about them. An easy way to think of an abstract class is to say that it fits between a full base class and an interface. Basically, it is a blend of the two. In this video, I am going to demonstrate what an abstract class is, how to use it, and when it makes sense to create an abstract class.
    Full courses: www.iamtimcorey.com/
    Source Code: leadmagnets.app/?Resource=Abs...
    Patreon: / iamtimcorey
    Newsletter signup: signup.iamtimcorey.com/
    Sponsors:
    Tuhafeni Angula (Patreon Subscriber)
    0:00 - Intro
    0:58 - Demo application walk-through
    3:19 - Creating a base Class
    5:53 - Making the base class abstract
    8:44 - "Interface portion" in the abstract class. The blend of interface and base class
    12:56 - Class inheritance in an abstract class
    16:00 - When to use an abstract class

Комментарии • 384

  • @signon77
    @signon77 4 года назад +30

    For clarity, this chap's tutorials are second to none. He takes a dry subject like 'abstract' classes, breaks it down, gives easy to follow examples and seems to enjoy conveying information to those less experienced than himself. Tim Corey deserves a cyber standing ovation.

    • @signon77
      @signon77 4 года назад

      Just to clarify: I have no idea what a 'cyber standing ovation' is as I simply made it up on the spot. An image of grateful theater goers doesn't lend itself to internet usage, true, but I'm sure you get my drift.

    • @IAmTimCorey
      @IAmTimCorey  4 года назад +1

      I appreciate the kind words and the ovation.

    • @marcinpawelw
      @marcinpawelw 2 года назад +1

  • @rafaelg0225
    @rafaelg0225 4 года назад +36

    Hi Tim, I've been a lead for the past 12 years for 2 to 80 devs teams with tons of junior and mid level developers and I've never been able to explain in an easy and understandable way abstract classes, you nailed it my friend, from now on everytime a dev ask me to explain abstract classes to them I will send them a link to this video and demand from them to donate 5 bucks to your Patreon ;) Thank you man

    • @IAmTimCorey
      @IAmTimCorey  4 года назад +4

      I am glad it was so clear and thanks for the recommendations.

  • @amortalbeing
    @amortalbeing 2 года назад +16

    Also for those that might be curious about the difference between a virtual method and an abstract method:
    Virtual methods have an implementation and provide the derived classes with **the option** of overriding it.
    while Abstract methods **do not** provide an implementation and **force** the derived classes to override the method.

  • @cirezno5960
    @cirezno5960 3 года назад +10

    Oh my God !! 8 years after school, I for the first time, understand what is an abstract class. And the differences with an interface !
    Thank you very much Monsieur Tim Corey

    • @IAmTimCorey
      @IAmTimCorey  3 года назад +2

      I am glad it finally clicked.

  • @TheAngelOfDeath01
    @TheAngelOfDeath01 2 года назад +7

    A short video that absolutely nails it!
    "A truck is not a car."
    True... but a truck is a vehicle, and so is a car. So your base class would be vehicle and car and truck would be child classes since they have similar properties. A motorcycle is also a vehicle, as is a tractor. And all of them implement similar properties.

  • @louiseolsson794
    @louiseolsson794 2 года назад +5

    Thank you for always explaining things in a calm and structured way!

  • @isabelleseah8567
    @isabelleseah8567 Год назад +1

    You're honestly the best Tim!! Your videos have helped me grasp the foundational topics so much, and I just love the way you explain concepts in such a clear and concise manner. Thanks loads!!!

  • @justinfs
    @justinfs 5 лет назад +1

    Thanks for this, I have been reading a book that is heavy on the how and light on the why/when. Your concise explanation helped me to understand the use cases for abstract classes better.

  • @marceloleoncaceres6826
    @marceloleoncaceres6826 8 месяцев назад +4

    Thank you, Tim. If you find that I thank you more than once for the same video, it's because sometimes I watch the same video a lot of times :) (I wish I could learn only by watching the video once)

    • @IAmTimCorey
      @IAmTimCorey  8 месяцев назад +2

      You are welcome. I am glad they are helpful and I am glad you are using them as reference material. That is how I intend for them to be used - they are visual archives of how to do things in C#. Even I refer to them sometimes.

  • @kanteristu
    @kanteristu 3 года назад +3

    Before this video I thought I understood what an abstract class is and how it works. Now I can certainly say I know way better than I used to. Thank you Tim! Awesome video!

  • @daraiuskeeka8596
    @daraiuskeeka8596 5 лет назад +2

    Thank you for making this video. It absolutely helped me remove the fog in my mind and made it easy for me to explain Abstract Classes to my son.

  • @Uncle-Dee
    @Uncle-Dee 8 дней назад

    This level of knowledge needs to be made illegal, Wow!! such clarity and finesse!
    Thank you so much @IAmTimCorey

    • @IAmTimCorey
      @IAmTimCorey  8 дней назад +1

      I’m glad it was helpful.

  • @Thomas-ix7xq
    @Thomas-ix7xq 3 года назад +2

    Wow you picked a great example to explain this. Also the explanations themselves are super understandable. In just 20 minutes you explained this way better than my teachers did in multiple lessons. It helped me a lot, thank you!!

    • @IAmTimCorey
      @IAmTimCorey  3 года назад +1

      I am glad it was so clear and helpful.

  • @marklord7614
    @marklord7614 5 лет назад +2

    I have taken many classes, and I can certainly say that you are very good at teaching. It is a pleasure to learn. I will certainly be purchasing classes.

  • @EnsYlmaz51
    @EnsYlmaz51 3 года назад +4

    I laughed out loud when auto generated subtitles said "a toilet on Tundra is not a car" at 17:52
    great explanation btw, I think I understand all now

    • @IAmTimCorey
      @IAmTimCorey  3 года назад +1

      I work hard on the pronunciation, but once in a while...

  • @zachallen6256
    @zachallen6256 4 года назад

    Man, this is really great. I swear I have had so much trouble figuring out abstracts, delegates, and interfaces but these 3 videos changed that. I will be purchasing the full versions of your lessons and learning c# here from now on. I like to re write the code on my own to make sure I understand what each line is doing, and then trying to create my own examples after it helps it stick.

    • @IAmTimCorey
      @IAmTimCorey  4 года назад

      Awesome! I'm glad they were so helpful.

  • @bernardbouree3997
    @bernardbouree3997 5 лет назад +3

    I finally understood the use of abstract class !! Thanks for your great video

  • @anmjubaer
    @anmjubaer Год назад +1

    thanks Tim for giving amazing hands-on insights.

  • @Shazbot277
    @Shazbot277 2 года назад +5

    thank you again for a simple explanation of something that seems complex

  • @louisswanepoel1614
    @louisswanepoel1614 3 года назад +2

    This video was sufficient enough in the explanation in the sense that I can have that "Oh yeah," moment while working. Thing is you have so many options to do the same thing and everyone will tell you something different on how to implement a solution. Sometimes you just need to be aware of a useful functionality.

  • @nandakun9235
    @nandakun9235 5 лет назад

    Once you start talking i get this weird awesome vibe that keeps the whole thing intersting to me. You are a wonderful tutor sir, and we are very grateful for what you're doing!

    • @IAmTimCorey
      @IAmTimCorey  5 лет назад

      I'm glad I keep your attention.

  • @timothyn4699
    @timothyn4699 3 года назад

    Very clearly explained, it was fuzzy in my mind before but now I understand what and why you might use abstract items. Thanks!

    • @IAmTimCorey
      @IAmTimCorey  3 года назад

      Glad it was helpful and clear!

  • @FranciscoPrado-rb4lu
    @FranciscoPrado-rb4lu Год назад +2

    WOW! clear and concise the best explanation I have found of abstract classes

  • @mantis2k11
    @mantis2k11 4 года назад

    Really good explanation for basic approaches. Good to have you here!

  • @muditha4
    @muditha4 4 года назад

    Clear explanation and presentation on abstract classes. I like the way you bring the practical side more into your videos rather than presenting only theoretical aspects.

  • @jugdeshvaghella4484
    @jugdeshvaghella4484 5 лет назад +2

    Thank you alot, I will never forget this.

  • @valeriopavan
    @valeriopavan 4 года назад

    This could represent for me the BIG ANSWER I was looking for!
    Thanks a lot, Tim! :)

  • @jannieboshoff5185
    @jannieboshoff5185 4 года назад

    Writing my 70-483 c# exam soon and your videos definitely helps me prepare much better!

  • @abdulmudhir4042
    @abdulmudhir4042 4 года назад +2

    I don't know if you still read your comment but man you're a amazing. Thank you very much. Teaching the basic, base, interface cleared up a lot of stuff for abstract classes.

  • @ragavanraviajan
    @ragavanraviajan 5 лет назад

    This video helps to get a quick recap on almost benefits of abstract classes.. Great!

  • @harag9
    @harag9 5 лет назад

    Excellent & clear as usual, thanks Tim!

  • @codeme8016
    @codeme8016 Год назад +1

    Best explanation. Understood finally! Thanks a lot.

  • @torrvic1156
    @torrvic1156 11 месяцев назад +1

    Great explanations as usual! Thank you Tim!

  • @orany321
    @orany321 9 месяцев назад +1

    Thanks, I know of the use of words "virtual", "abstract" in C#, but it just started to get messy in my head on what's the actual difference between interface and abstract. Now it's clean for me again!

    • @IAmTimCorey
      @IAmTimCorey  9 месяцев назад

      I am glad it was helpful.

  • @nuno.peixoto
    @nuno.peixoto 5 лет назад +1

    Thanks for your videos! They have been helping me a lot!

  • @dowdag
    @dowdag 5 лет назад +1

    Excellent insightful video tutorial, thanks!

  • @vert3cx373
    @vert3cx373 2 года назад

    Best explanation by miles, thanks Tim!

  • @jpsietsma
    @jpsietsma 5 лет назад +1

    Your videos are the best, Thanks for all the great content!

  • @Np10004
    @Np10004 2 года назад

    Great Tim. Very clear explanation

  • @CarlMillsMusic
    @CarlMillsMusic 5 лет назад

    Fantastic explanation, thanks so much!

  • @NotNazuh
    @NotNazuh 2 года назад

    Very clear explanation, thank you.

  • @oneworldnoborders
    @oneworldnoborders 4 года назад

    Great explanation. Thanks a lot Tim.

  • @superlambda4144
    @superlambda4144 5 лет назад

    Thank you so much for your video! Your videos are really helpful!

    • @IAmTimCorey
      @IAmTimCorey  5 лет назад +1

      You are most welcome. Thanks for watching.

  • @mahmudx
    @mahmudx 3 года назад +1

    Tim, Bob Tabor and Kudvenkat are my teaching guru

  • @moslemkhalili8577
    @moslemkhalili8577 3 года назад

    very clear explanation,tanks!

  • @lwinmoehein2894
    @lwinmoehein2894 2 года назад

    You explained it well, thanks for your educative video

  • @przemol1983
    @przemol1983 5 лет назад +1

    Wow. Thank you very much!

  • @tariqmezeik
    @tariqmezeik 4 года назад

    really amazing job. thanks.

  • @vaibhavraut6394
    @vaibhavraut6394 4 года назад +1

    This is really good explanation. Whole video is good, later part i liked most. Right we should not use concept because it is there but should be very careful on where it fits perfect specially in case with inheritance as it must maintain Is-a relationship. Thanks Tim!

  • @alimusa7058
    @alimusa7058 3 года назад

    Thank you Tim you make me understand the benefit and different between abstract and interface and virtual modifier, I studied java but not understand.

  • @vkpunique
    @vkpunique 4 года назад

    Good Video, Covers Everything i want to know about abstract class

  • @Kerreber
    @Kerreber 3 года назад +1

    very clear, thanks!

  • @kevkas
    @kevkas 5 лет назад

    Great video, very clear explanation, thanks Tim.

    • @IAmTimCorey
      @IAmTimCorey  5 лет назад +1

      You are welcome.

    • @kevkas
      @kevkas 5 лет назад

      @@IAmTimCorey Tim, one question if I may from your videos I understand that interfaces can have properties and methods (WITHOUT code in them), and abstract classes can have abstract and virtual methods (WITH or WITHOUT code in them), but not properties. Is that correct? Is that another way to differentiate when to use an abstract class and when to use an interface?
      Thanks.

    • @IAmTimCorey
      @IAmTimCorey  5 лет назад +1

      You can have properties in an abstract class.

  • @tonguyenducmanh
    @tonguyenducmanh Год назад +1

    great tutorial. thank u so much

  • @akshitdas2012
    @akshitdas2012 3 года назад

    A really good video.... Thank you so much for this...

  • @bokangkhumalo3354
    @bokangkhumalo3354 2 года назад +2

    🥺😪Thank you so much, this helpled me complete my assignment and i got a distinction 🎊

  • @xVidarx18
    @xVidarx18 5 лет назад

    Yet another awesome one!

  • @seethablegalzoom
    @seethablegalzoom 3 года назад

    Perfect Explanation!

  • @rezaulk
    @rezaulk Год назад

    Clear explanation , thanks ton

  • @Skeiln
    @Skeiln 5 лет назад +1

    Thank you for your time and effort, this really helps me getting better, I just have a hard time understanding all the different classes and how to use them all together with interfaces, its a hard topic to be honest (or I am just a slow learner that is possible aswell)

    • @IAmTimCorey
      @IAmTimCorey  5 лет назад +2

      It is a hard topic. It helps if you start using them (even if you don't fully understand them) in demo projects. As you see how they work, you will get a better grasp on them.

    • @Skeiln
      @Skeiln 5 лет назад +1

      @@IAmTimCorey True that, I try to work with them everyday now making small demo's just for fun, it does help me understanding them all better, and I come watch a lot of your tutorials they are really helpful. At this moment I am following a course for C# and we just started with classes and interfaces (& generics). Everyday its going better, its awesome to see myself improve. Thanks again and have a nice day

  • @dhanarajsalaimani4642
    @dhanarajsalaimani4642 3 года назад

    Great Explanation!

  • @znoran
    @znoran 2 года назад

    Very clear explenation thank you

  • @joeman123964
    @joeman123964 3 месяца назад

    love this! I'm studying for my promotion exams to become a mid level software engineer. i am feeling confident!

  • @sebastienmorin9020
    @sebastienmorin9020 3 года назад +1

    Great job with the video, you got me out of a serious headache!

    • @IAmTimCorey
      @IAmTimCorey  3 года назад +2

      Glad I could help.

    • @sebastienmorin9020
      @sebastienmorin9020 3 года назад +1

      @@IAmTimCorey Your videos are great! Helped me a lot starting my job as a junior!

  • @alexdonchev1491
    @alexdonchev1491 4 года назад

    Good job mate, thanks!!

  • @vinuhosanagar1
    @vinuhosanagar1 5 лет назад

    You are the best!
    Thanks much.

  • @massimolaruccia1190
    @massimolaruccia1190 4 года назад +2

    Bravo Tim!Sei molto bravo!

  • @blankomog
    @blankomog 2 года назад +3

    Hi Tim. Thanks for your great vid as always. Can you do a mini course on Data structures and algos with C#. That will be great!

    • @IAmTimCorey
      @IAmTimCorey  2 года назад

      Thanks for the suggestion. Please add it to the list on the suggestion site so others can vote on it as well: suggestions.iamtimcorey.com/

  • @JensOleMortensen
    @JensOleMortensen 3 года назад

    Awesome video... Thanks!

  • @BryanPollardPhotos
    @BryanPollardPhotos 3 года назад

    Another great one!

  • @Nova04550
    @Nova04550 2 года назад +3

    Interfaces and and abstract classes got even more similar in C# 8 since you can now define default implementations of interface members.

    • @IAmTimCorey
      @IAmTimCorey  2 года назад +6

      Yep, there are definitely more similarities, but their purposes have not changed. Don't use an interface in place of an abstract class just because it can have default implementations. That will cause you nothing but pain. Default implementations cannot be used on concrete classes, just with variables that use the interface. Also, they aren't designed to act like abstract classes. They are designed to allow us to upgrade interfaces without breaking legacy code.

  • @sanwalchaudhry2099
    @sanwalchaudhry2099 5 лет назад +1

    Thanks a lot Corey..

    • @IAmTimCorey
      @IAmTimCorey  5 лет назад

      You are most welcome. Thanks for watching.

  • @DanCanning
    @DanCanning 7 месяцев назад +1

    This "IS A" fabulous video. 😃

  • @PixelTB
    @PixelTB 3 года назад +1

    Thank you so much!

  • @sang7373
    @sang7373 5 лет назад +1

    Thank you so much for taking your time and making all these videos. Appreciate your efforts !!!
    I would like to know if you are planning to make a video on Reflection ?

    • @IAmTimCorey
      @IAmTimCorey  5 лет назад +1

      It is on the list. I've been avoiding it a bit because it is such an abused topic (reflection is rarely the correct answer) but I'll cover it at some point.

    • @miablazekovic1125
      @miablazekovic1125 5 лет назад

      Glad to hear that, I'm interested too

  • @Dahgne
    @Dahgne 5 лет назад

    Very helpful, thank you

  • @anuranjansrivastav9864
    @anuranjansrivastav9864 5 лет назад +1

    Very informative..thank you so much..

  • @Bhaweshgupta
    @Bhaweshgupta 3 года назад

    Okay this is some super impressive stuff

  • @jellz77
    @jellz77 3 года назад

    really great explanations

  • @IdrisQadir
    @IdrisQadir 2 года назад +1

    Thank you that is great

  • @anhayzzing33
    @anhayzzing33 4 года назад +2

    that was so perfect oh my god you're like the god of I can teach everything to anyone... amen

    • @IAmTimCorey
      @IAmTimCorey  4 года назад

      lol, I am glad you enjoyed it.

  • @jorgeuribe2847
    @jorgeuribe2847 5 лет назад +1

    Hi Tim, please teach us about Aggregation, Composition and association. Great videos btw.

    • @IAmTimCorey
      @IAmTimCorey  5 лет назад +1

      I'll add those suggestions to the list. Thanks.

  • @doicare2111
    @doicare2111 11 месяцев назад +1

    Great video, Thanks Tim. but what is ur opinion on using the interface IDataAccess for the DataAccess class and then use the DataAccess class as an abstract class ?

  • @rimmongeorge3587
    @rimmongeorge3587 5 лет назад

    Great explanation Mr. Tim, thanks, could you cover please the best practices to make commercial applications

    • @IAmTimCorey
      @IAmTimCorey  5 лет назад

      I am going to cover this in an upcoming series.

  • @amnesia3490
    @amnesia3490 3 года назад

    awesome explanation

  • @gilhooli6685
    @gilhooli6685 5 лет назад

    I like it. Thanks a lot.

  • @DimiExperience
    @DimiExperience 4 года назад +1

    Really helpful and awesome for beginners not to struggle, like some of us, later down the road😊! Do you have any “best practices” for designing the sql(or any relational) data structuring? Keep on rocking, C# for life!

    • @IAmTimCorey
      @IAmTimCorey  4 года назад

      I have a course that covers the best practices for designing a SQL database: www.iamtimcorey.com/p/sql-databases-from-start-to-finish

  • @bogidar68
    @bogidar68 3 года назад

    Thank you!

  • @upcsatx
    @upcsatx 4 года назад

    Good video. Sometimes I find it challenging to figure out when to choose "composition over inheritance". You mention interfaces here, and also how not to treat a car as if it were a truck. Perhaps a future video delving into how/when to choose composition over inheritance. For example, instead of having a car and truck inherit from an abstract vehicle class, just have them both implement the IDriveable interface? ... it's probably one of those situations where there's no right/wrong way, so a video looking at the tradeoffs of doing composition vs inheritance might help. BTW, as I write this I see the Composition Over Inheritance wikipedia page has been flagged as "confusing" since 2015.

    • @IAmTimCorey
      @IAmTimCorey  4 года назад

      Thanks for the suggestion. In general, I default to composition because inheritance is really such a small target. However, it does depend on the situation. I agree that it can be very confusing. I'll add the suggestion to my list.

  • @RagingTortoise
    @RagingTortoise 3 года назад +1

    This is such a basic topic, but also a typical interview question!

  • @webster.
    @webster. 2 года назад

    Thanks Tim

  • @aqray30
    @aqray30 4 года назад

    This a great way to showcases the usage of an abstract class, thanks, Tim!
    I've worked in different companies and we were using C# as one of the development languages, but I didn't see any usage of an abstract class.
    My question is: Is it necessary to use abstract classes to achieve the best practice?

    • @IAmTimCorey
      @IAmTimCorey  4 года назад

      It depends on the situation.

  • @yasithudawatte8924
    @yasithudawatte8924 3 года назад

    Thanks, well exmplained.
    Q. For the same example, if you follow SOLID, will you implement IDataAccess interface to DataAccess abstract class?

  • @Rafacz
    @Rafacz 5 лет назад +1

    Good guy Corey thanks! :)

  • @masoudhosseiny5706
    @masoudhosseiny5706 2 года назад

    Hi Tim, is there any way to create an abstract class and use it for user control classes? I have a bunch of user controls that contain lots of the same properties and methods. I have to copy and paste those and debugging them is a nightmare.

  • @ckschumeister411
    @ckschumeister411 5 лет назад

    thank you!

  • @Old.Man.Of.The.Mountain
    @Old.Man.Of.The.Mountain 4 года назад +2

    Great presentation as usual. But this video would feel a bit "in there" for someone new to OOP in general. I think a longer video on architecting software, where requirements are discussed first before a design is created, will remove any cobwebs surrounding the use of Base classes vs Abstract classes vs Interfaces. Given your teaching style, it would become a definitive video on this subject on RUclips.

    • @IAmTimCorey
      @IAmTimCorey  4 года назад +1

      That's what I do with my start to finish courses. I try to show you these things in the real world.

  • @khldomar
    @khldomar Год назад +1

    thank you

  • @samochreno
    @samochreno 2 года назад

    amazing video

  • @ameyakasar9538
    @ameyakasar9538 5 лет назад +4

    Great Video Tim !! How do we decide when to use Abstract class and when to use an interface? Also can we achieve Dependency Inversion through Abstract Class?

    • @IAmTimCorey
      @IAmTimCorey  5 лет назад +6

      Good question. In order to use an abstract class, you need to have an "is a" relationship. So a cat is an animal, so CatModel could inherit from AnimalModel (possibly). Inheritance is a lot harder to use than people think. Remember that you can only inherit from one parent so while the promise of code sharing is great, you can't just use it as a mechanism to not write duplicate code. You need to be very careful about that relationship. When it is done right, though, inheritance (which is what Abstract classes are) can be powerful. For most scenarios, though, Interfaces are the better option. You can have multiple, they can be specific to your needs (look at the Interface Segregation Principle), and they don't imply a relationship. Dependency Inversion really doesn't do well with Abstract classes because you are still somewhat dependent on that abstract class. It is better accomplished with Interfaces.

    • @ameyakasar9538
      @ameyakasar9538 5 лет назад +1

      Thanks for clarifying Tim!!