Why not inherit from List?

前端 未结 27 1718
悲哀的现实
悲哀的现实 2020-11-21 05:39

When planning out my programs, I often start with a chain of thought like so:

A football team is just a list of football players. Therefore, I should

27条回答
  •  天涯浪人
    2020-11-21 06:02

    What if the FootballTeam has a reserves team along with the main team?

    class FootballTeam
    {
        List Players { get; set; }
        List ReservePlayers { get; set; }
    }
    

    How would you model that with?

    class FootballTeam : List 
    { 
        public string TeamName; 
        public int RunningTotal 
    }
    

    The relationship is clearly has a and not is a.

    or RetiredPlayers?

    class FootballTeam
    {
        List Players { get; set; }
        List ReservePlayers { get; set; }
        List RetiredPlayers { get; set; }
    }
    

    As a rule of thumb, if you ever want to inherit from a collection, name the class SomethingCollection.

    Does your SomethingCollection semantically make sense? Only do this if your type is a collection of Something.

    In the case of FootballTeam it doesn't sound right. A Team is more than a Collection. A Team can have coaches, trainers, etc as the other answers have pointed out.

    FootballCollection sounds like a collection of footballs or maybe a collection of football paraphernalia. TeamCollection, a collection of teams.

    FootballPlayerCollection sounds like a collection of players which would be a valid name for a class that inherits from List if you really wanted to do that.

    Really List is a perfectly good type to deal with. Maybe IList if you are returning it from a method.

    In summary

    Ask yourself

    1. Is X a Y? or Has X a Y?

    2. Do my class names mean what they are?

提交回复
热议问题