IsA and HasA Relationship in C# with Examples

ููŠ ุงู„ู…ู‚ุงู„ ุฏู‡ุŒ ู‡ู†ุชูƒู„ู… ุนู† ุนู„ุงู‚ุงุช ุงู„ู€ IsA ูˆุงู„ู€ HasA ููŠ C# ุจุงู„ุฃู…ุซู„ุฉ. ูŠุง ุฑูŠุช ุชู‚ุฑุง ู…ู‚ุงู„ู†ุง ุนู† ุงู„ู€ Inheritance ููŠ C# ู‚ุจู„ ู…ุง ุชูƒู…ู„ ู‡ู†ุง.

ู…ู‡ู… ุฌุฏู‹ุง ู†ูู‡ู… ุงู„ูุฑู‚ ุจูŠู† ุนู„ุงู‚ุฉ ุงู„ู€ IS-A ูˆุงู„ู€ HAS-A ุจูŠู† ุงู„ู€ classes. ูƒุชูŠุฑ ู…ู† ุงู„ุทู„ุจุฉ ูˆุงู„ู…ุทูˆุฑูŠู†ุŒ ูˆุฎุตูˆุตู‹ุง ุงู„ู…ุจุชุฏุฆูŠู†ุŒ ุจูŠุชู„ุฎุจุทูˆุง ุจูŠู† ุงู„ุนู„ุงู‚ุชูŠู† ุฏูˆู„. ูˆุจุณุจุจ ูƒุฏู‡ุŒ ุจูŠุนู…ู„ูˆุง ุงู„ุนู„ุงู‚ุงุช ุจูŠู† ุงู„ู€ classes ุจุชุฑุชูŠุจ ุบู„ุท.

ุนุดุงู† ูƒุฏู‡ุŒ ุงู„ู†ู‡ุงุฑุฏุฉ ู‡ุดุฑุญ ุฅูŠู‡ ู‡ูŠ ุจุงู„ุธุจุท ุนู„ุงู‚ุงุช ุงู„ู€ IS-A ูˆุงู„ู€ HAS-AุŒ ูˆุฅูŠู‡ ุงู„ูุฑูˆู‚ ุจูŠู†ู‡ู…ุŒ ูˆุฅู…ุชู‰ ูˆุฅุฒุงูŠ ู†ุณุชุฎุฏู…ู‡ู… ููŠ ุงู„ุชุทุจูŠู‚ุงุช ุงู„ูˆุงู‚ุนูŠุฉ. ู‡ู†ุงุŒ ู‡ูˆุฑูŠูƒ ุฃู…ุซู„ุฉ ุจู„ุบุฉ C#ุŒ ูˆุงู„ู…ูู‡ูˆู… ุฏู‡ ุจูŠู†ุทุจู‚ ุนู„ู‰ ุฃูŠ ู„ุบุฉ ุจุฑู…ุฌุฉ ุดูŠุฆูŠุฉ ุชุงู†ูŠุฉ ุฒูŠ Java, C++ุŒ ุฅู„ุฎ.

IsA and HasA Relationship in C#

ููŠ C#ุŒ ุฒูŠ ู„ุบุงุช ุจุฑู…ุฌุฉ ุดูŠุฆูŠุฉ ูƒุชูŠุฑุŒ ู…ูุงู‡ูŠู… ุนู„ุงู‚ุงุช ุงู„ู€ โ€œIsAโ€ ูˆุงู„ู€ โ€œHasAโ€ ุฃุณุงุณูŠุฉ ุนุดุงู† ู†ูู‡ู… ุงู„ู€ inheritance ูˆุงู„ู€ composition ุจุงู„ุชุฑุชูŠุจ. ุงู„ุนู„ุงู‚ุงุช ุฏูŠ ุจุชุณุงุนุฏ ููŠ ุชุตู…ูŠู… ู‡ูŠูƒู„ ุงู„ู€ classes ูˆุงู„ู€ objects ููŠ ุงู„ุจุฑู†ุงู…ุฌ.

IsA Relationship (Inheritance)

  • Definition: ุนู„ุงู‚ุฉ ุงู„ู€ IsA ุจุชุชุญู‚ู‚ ุนู† ุทุฑูŠู‚ ุงู„ู€ inheritance. ู‡ูŠ ุจุชู…ุซู„ ุนู„ุงู‚ุฉ ู‡ุฑู…ูŠุฉ (hierarchical) ุจูŠู† base class (parent) ูˆ derived classes (children). ููŠ ุนู„ุงู‚ุฉ ุงู„ู€ IsAุŒ ุงู„ู€ derived class ุจูŠูƒูˆู† ู†ุณุฎุฉ ู…ุชุฎุตุตุฉ (specialized version) ู…ู† ุงู„ู€ base class.
  • Characteristics:
    • ุงู„ู€ Inheritance: ุงู„ู€ derived class ุจูŠูˆุฑุซ ุงู„ุฎุตุงุฆุต (properties) ูˆุงู„ู€ methods ู…ู† ุงู„ู€ base class.
    • ุงู„ู€ Polymorphism: ุงู„ู€ derived class ูŠู‚ุฏุฑ ูŠุนู…ู„ override ุฃูˆ extend ู„ูˆุธุงุฆู ุงู„ู€ base class.
    • ุงู„ู€ Substitutability: ุงู„ู€ Objects ุจุชุงุนุฉ ุงู„ู€ derived class ู…ู…ูƒู† ู†ุชุนุงู…ู„ ู…ุนุงู‡ุง ูƒุฃู†ู‡ุง objects ู…ู† ุงู„ู€ base class.

HasA Relationship (Composition)

  • Definition: ุนู„ุงู‚ุฉ ุงู„ู€ HasA ุจุชูุณุชุฎุฏู… ุนุดุงู† ุชุฏู„ ุนู„ู‰ ุงู„ุงุณุชุฎุฏุงู… ุฃูˆ ุงู„ุชูƒูˆูŠู† (composition). ู‡ูŠ ุจุชูˆุถุญ ุฅู† object ู…ู† class ู…ุนูŠู† โ€œุจูŠุญุชูˆูŠ ุนู„ู‰โ€ ุฃูˆ โ€œุจูŠุชูƒูˆู† ู…ู†โ€ objects ู…ู† class ุชุงู†ูŠ. ุงู„ุนู„ุงู‚ุฉ ุฏูŠ ุฃู‚ู„ ุชุฑุงุจุทู‹ุง (tightly coupled) ู…ู† ุงู„ู€ inheritance.
  • Characteristics:
    • ุงู„ู€ Composition: ุงู„ู€ class ุจูŠุญุชูˆูŠ ุนู„ู‰ ุฃูˆ ุจูŠุชูƒูˆู† ู…ู† objects ู…ู† class ุชุงู†ูŠ.
    • ุงู„ู€ Independence: ุงู„ู€ object ุงู„ู…ุญุชูˆู‰ (ุฒูŠ Engine) ูŠู‚ุฏุฑ ูŠูƒูˆู† ู…ูˆุฌูˆุฏ ุจุดูƒู„ ู…ุณุชู‚ู„ ุนู† ุงู„ุญุงูˆูŠุฉ (ุฒูŠ Car).
    • ุงู„ู€ Encapsulation: ุทุฑูŠู‚ุฉ ุงู„ุนู…ู„ ุงู„ุฏุงุฎู„ูŠุฉ ู„ู„ู€ object ุงู„ู…ุญุชูˆู‰ ุจุชูƒูˆู† ุนุงุฏุฉู‹ ู…ุฎููŠุฉ ุนู† ุงู„ู€ class ุงู„ุฎุงุฑุฌูŠ.
    • Flexibility and Reusability: ุงู„ู€ Objects ู…ู…ูƒู† ุงุณุชุจุฏุงู„ู‡ุง ุฃูˆ ุชุบูŠูŠุฑู‡ุง ุจุณู‡ูˆู„ุฉุŒ ูˆุฏู‡ ุจูŠุฏูŠ ู…ุฑูˆู†ุฉ ุฃูƒุจุฑ ููŠ ุชุตู…ูŠู… ุงู„ูƒูˆุฏ.

IsA and HasA Relationship in C# with Examples

ุฎู„ูˆู†ุง ู†ูู‡ู… ุนู„ุงู‚ุฉ ุงู„ู€ IS-A ูˆุงู„ู€ HAS-A ููŠ C# ุจู…ุซุงู„. ุจุต ุนู„ู‰ ุงู„ู…ุซุงู„ ุงู„ู„ูŠ ุชุญุช:

class Rectangle{
          // Some Data Members
          // Some Member Functions
}

ุฏู‡ class ุงุณู…ู‡ Rectangle. ุฎู„ูˆู†ุง ู†ูุชุฑุถ ุฅู† ููŠู‡ ุดูˆูŠุฉ data members ูˆmember functions ุฌูˆู‡ ุงู„ู€ class ุฏู‡. ุจุนุฏ ูƒุฏู‡ุŒ ุนู†ุฏู†ุง class ุงุณู…ู‡ CuboidุŒ ุจูŠูˆุฑุซ ู…ู† Rectangle class ุงู„ู„ูŠ ููˆู‚ ูƒุงู„ุชุงู„ูŠ:

class Cuboid : Rectangle{
          // Some Data Members
          // Some Member Functions
}

ุฏู‡ Cuboid classุŒ ุงู„ู„ูŠ ุจูŠูˆุฑุซ ู…ู† Rectangle class. ูˆุจุฑุถู‡ ุงูุชุฑุถ ุฅู† ุงู„ู€ class ุฏู‡ ููŠู‡ ุดูˆูŠุฉ data members ูˆ member functions ุฌูˆุงู‡. ุฏู„ูˆู‚ุชูŠ ุฎู„ูˆู†ุง ู†ูƒุชุจ class ูƒู…ุงู† ูƒุงู„ุชุงู„ูŠ:

class Table{
       Rectangle top;
       int legs;
}

ุฏู‡ Table classุŒ ู…ุด ุจูŠูˆุฑุซ ู…ู† ุฃูŠ class. ุงู„ู€ class ุฏู‡ ููŠู‡ ุงุชู†ูŠู† data members. ูˆุงุญุฏ ู…ู†ู‡ู… ู…ู† ู†ูˆุน Rectangle classุŒ ูˆุงู„ุชุงู†ูŠ ู…ุชุบูŠุฑ ู…ู† ู†ูˆุน integerุŒ ุงู„ู„ูŠ ู‡ู…ุง top ูˆlegs.

ุฅุฐู‹ุงุŒ ุงู„ุฃูˆู„ ุนู…ู„ู†ุง class ุงุณู…ู‡ Rectangle. ุจุนุฏูŠู† ุนู…ู„ู†ุง class ุชุงู†ูŠ ุงุณู…ู‡ CuboidุŒ ุจูŠูˆุฑุซ ู…ู† Rectangle class. ูˆุจุนุฏูŠู† ุนู…ู„ู†ุง class ุชุงู„ุช ุงุณู…ู‡ Table. ุฌูˆู‡ Table classุŒ ุนู…ู„ู†ุง ู…ุชุบูŠุฑ ู…ู† ู†ูˆุน Rectangle ูˆู…ุชุบูŠุฑ ุชุงู†ูŠ ู…ู† ู†ูˆุน integer.

ุงู„ู€ class Cuboid ุจูŠูˆุฑุซ ู…ู† Rectangle class. ูู‡ู„ ู†ู‚ุฏุฑ ู†ู‚ูˆู„ ุฅู† ุงู„ู€ Cuboid IS A RectangleุŸ ุฃูŠูˆู‡. ูุงู„ุนู„ุงู‚ุฉ ุจูŠู† ุงู„ู€ Rectangle ูˆุงู„ู€ Cuboid classes ู‡ูŠ ุนู„ุงู‚ุฉ IS-A. ูุงู„ู†ู‚ุทุฉ ุงู„ู„ูŠ ู„ุงุฒู… ุชูุชูƒุฑู‡ุง ู‡ูŠ ุฅู†ู†ุง ู„ู…ุง ุจู†ุนู…ู„ Inheritance ุฃูˆ ุนู„ุงู‚ุฉ Parent-ChildุŒ ู†ู‚ุฏุฑ ู†ู‚ูˆู„ ุฅู† ุงู„ุนู„ุงู‚ุฉ ุฏูŠ ู‡ูŠ ุนู„ุงู‚ุฉ IS-A ููŠ ู„ุบุงุช ุงู„ุจุฑู…ุฌุฉ ุงู„ุดูŠุฆูŠุฉ.

ุจุนุฏ ูƒุฏู‡ุŒ Table class ุจุชุงุนู†ุง ููŠู‡ ู…ุชุบูŠุฑ top ู…ู† ู†ูˆุน Rectangular. ุฏู‡ ู…ุนู†ุงู‡ ุฅู† Table class ููŠู‡ object ู…ู† Rectangle class. ูู‡ู„ ู†ู‚ุฏุฑ ู†ู‚ูˆู„ ุฅู† Table class HAS A RectangleุŸ ุฃูŠูˆู‡ุŒ ุงู„ู€ Table class Has a Rectangle. ูุงู„ุนู„ุงู‚ุฉ ุจูŠู† ุงู„ู€ Table ูˆุงู„ู€ Rectangle class ู‡ูŠ ุนู„ุงู‚ุฉ Has A.

ุฅุฐู‹ุงุŒ ู†ู‚ุฏุฑ ู†ุณุชุฎุฏู… ุงู„ู€ class ุจุชุงุนู†ุง ุจุทุฑูŠู‚ุชูŠู†: Is A ูˆ Has A. ุฏู‡ ุดุงุฆุน ููŠ ู„ุบุงุช ุงู„ุจุฑู…ุฌุฉ ุงู„ุดูŠุฆูŠุฉุŒ ู…ุด ุจุณ ููŠ C#ุ› ู‡ูˆ ู…ูˆุฌูˆุฏ ููŠ C++, JavaุŒ ูˆู„ุบุงุช ุจุฑู…ุฌุฉ ุดูŠุฆูŠุฉ ุชุงู†ูŠุฉ.

ูุงู„ู€ class ููŠ C# ู…ู…ูƒู† ูŠูุณุชุฎุฏู… ุจุทุฑูŠู‚ุชูŠู†. ุทุฑูŠู‚ุฉ ุจุงุณุชุฎุฏุงู… ุนู„ุงู‚ุฉ ุงู„ู€ inheritanceุŒ ูŠุนู†ูŠ class ูŠูˆุฑุซ ู…ู† class ุชุงู†ูŠ. ูˆุงู„ุทุฑูŠู‚ุฉ ุงู„ุชุงู†ูŠุฉ ู‡ูŠ ุฅู†ู†ุง ู†ุนู…ู„ object ู…ู† ุงู„ู€ class ุฏู‡ ูˆู†ุณุชุฎุฏู…ู‡.

Real-time Example to Understand Is-A and Has-A Relationship

ุฎู„ูˆู†ุง ู†ูู‡ู… ุนู„ุงู‚ุงุช ุงู„ู€ IS-A ูˆุงู„ู€ HAS-A ุจู…ุซุงู„ ู…ู† ุงู„ูˆุงู‚ุน. ุฎู„ูˆู†ุง ู†ุงุฎุฏ ู…ุซุงู„. ุจุต ุนู„ู‰ ุงู„ุตูˆุฑุฉ ุงู„ู„ูŠ ุชุญุช: (ุตูˆุฑุฉ ุชุตู…ูŠู… ุนุฑุจูŠุฉ)

ุฎู„ูˆู†ุง ู†ูุชุฑุถ ุฅู† ุงู„ุตูˆุฑุฉ ุงู„ู„ูŠ ููˆู‚ ุฏูŠ ุจุชูˆุถุญ ุชุตู…ูŠู… ุนุฑุจูŠุชูŠ. ุฏู„ูˆู‚ุชูŠ ุฃู†ุง ุฃู‚ุฏุฑ ุฃุตู†ุน ุฃูŠ ุนุฏุฏ ู…ู† ุงู„ุนุฑุจูŠุงุช ู…ู† ุงู„ุชุตู…ูŠู… ุงู„ู„ูŠ ููˆู‚ ุฏู‡ ูˆุฃุจูŠุนู‡ู… ููŠ ุงู„ุณูˆู‚. (ุตูˆุฑุฉ ุนุฑุจูŠุงุช ู…ุตู†ุนุฉ)

ุชุตู†ูŠุน ุงู„ุนุฑุจูŠุงุช ู…ุนู†ุงู‡ ุฅู† ุฏูŠ objects. ุฏู„ูˆู‚ุชูŠุŒ ุฃู†ุง ุฃู‚ุฏุฑ ุฃุจูŠุน ุชุตู…ูŠู…ูŠ (ู…ุด ุงู„ุนุฑุจูŠุงุช ุงู„ู„ูŠ ุงุชุตู†ุนุช ุฃูˆ ุงู„ู€ objectsุŒ ุงู„ุชุตู…ูŠู… ุจุณ) ู„ุดุฑูƒุชูƒุŒ ูˆุฃู†ุช ุชู‚ุฏุฑ ุชุตู†ุน ุนุฑุจูŠุชูƒ ุจุดูˆูŠุฉ ุชุบูŠูŠุฑุงุช ููŠ ุงู„ุชุตู…ูŠู… ุงู„ู„ูŠ ู‡ุจูŠุนู‡ูˆู„ูƒ. (ุตูˆุฑุฉ ุชุตู…ูŠู… ุนุฑุจูŠุฉ ุฌุฏูŠุฏุฉ)

So, what are the uses of design class?

ุฅูŠู‡ ู‡ูŠ ุงุณุชุฎุฏุงู…ุงุช ุงู„ู€ design classุŸ ูŠุนู†ูŠุŒ ุจูƒุงู… ุทุฑูŠู‚ุฉ ู†ู‚ุฏุฑ ู†ุณุชุฎุฏู… ุงู„ู€ design classุŸ ู†ู‚ุฏุฑ ู†ุณุชุฎุฏู…ู‡ ุจุทุฑูŠู‚ุชูŠู†. ูŠุง ุฅู…ุง ู†ุดุงุฑูƒู‡ ู…ุน ุงู„ู€ derived classes ุฃูˆ ู†ู†ุดุฆ object.

  • ู„ูˆ class ุจูŠูˆุฑุซ ู…ู† class ุชุงู†ูŠุŒ ูŠุจู‚ู‰ ุนู†ุฏู‡ ุนู„ุงู‚ุฉ โ€˜IS Aโ€™ ู…ุนุงู‡.
  • ู„ูˆ class ุนู†ุฏู‡ object ู…ู† class ุชุงู†ูŠุŒ ูŠุจู‚ู‰ ุนู†ุฏู‡ ุนู„ุงู‚ุฉ โ€˜HAS Aโ€™ ู…ุนุงู‡.

ุฅุฐู‹ุงุŒ Table has a RectangleุŒ ูˆCuboid is a Rectangle.

ุจุนุฏ ูƒุฏู‡ุŒ ุงู„ุญุงุฌุฉ ุงู„ู…ู‡ู…ุฉ ู‡ูŠ ุฅู† ุงู„ู€ class ู…ู…ูƒู† ูŠูƒูˆู† ููŠู‡ ุฃู†ูˆุงุน ู…ุฎุชู„ูุฉ ู…ู† ุงู„ู€ members. ุฎู„ูˆู†ุง ู†ูุชุฑุถ ุฅู† ุนู†ุฏู†ุง ุชู„ุงุช ุฃู†ูˆุงุน: private, protected, public.

ุฅูŠู‡ ุงู„ู„ูŠ ุจูŠูƒูˆู† ู…ุชุงุญ ุฌูˆู‡ ุงู„ู€ classุŒ ูˆุฅูŠู‡ ุงู„ู„ูŠ ู…ุชุงุญ ููŠ ุงู„ู€ class ุงู„ู„ูŠ ููŠู‡ ุนู„ุงู‚ุฉ โ€˜IS Aโ€™ุŒ ูˆุฅูŠู‡ ุงู„ู„ูŠ ู…ุชุงุญ ููŠ ุงู„ู€ class ุงู„ู„ูŠ ููŠู‡ ุนู„ุงู‚ุฉ โ€˜HAS Aโ€™ุŸ

  • ูƒู„ ุงู„ู€ members ู…ุชุงุญุฉ ุฌูˆู‡ ุงู„ู€ class ู†ูุณู‡.
  • ุงู„ู€ public ูˆุงู„ู€ protected members ู…ุชุงุญูŠู† ููŠ ุงู„ู€ derived classes (ุนู„ุงู‚ุฉ IS-A).
  • ุงู„ู€ public members ุจุณ ู‡ูŠ ุงู„ู„ูŠ ู…ุชุงุญุฉ ู…ู† ุงู„ู€ non-derived classes (ุนู„ุงู‚ุฉ HAS-A).

Example to Understand IS-A Relationship in C#

ุจุต ุนู„ู‰ ุงู„ู…ุซุงู„ ุงู„ู„ูŠ ุชุญุช. ู‡ู†ุงุŒ ุงู„ุนู„ุงู‚ุฉ ุจูŠู† Rectangle ูˆ Cuboid ู‡ูŠ ุนู„ุงู‚ุฉ IS-AุŒ ูู†ู‚ุฏุฑ ู†ู‚ูˆู„ ุฅู† Cuboid IS-A Rectangle.

using System;
namespace IsAHasADemo
{
    public class Program
    {
        static void Main()
        {
            Cuboid cuboid = new Cuboid(3, 5, 7);
            Console.WriteLine($"Volume is : {cuboid.Volume()}");
            Console.WriteLine($"Area is : {cuboid.Area()}");
            Console.WriteLine($"Perimeter is : {cuboid.Perimeter()}");
            Console.ReadKey();
        }
    }
    class Rectangle
    {
        // Data Members
        public int Length;
        public int Breadth;
 
        // Member Functions
        public int Area()
        {
            return Length * Breadth;
        }
        public int Perimeter()
        {
            return 2 * (Length + Breadth);
        }
    }
    // Establishing Parent-Child Relationship
    // IS-A Relationship i.e. Cuboid IS-A Rectangle
    class Cuboid : Rectangle
    {
        public int Height;
        public Cuboid(int l, int b, int h)
        {
            Length = l;
            Breadth = b;
            Height = h;
        }
        public int Volume()
        {
            return Length * Breadth * Height;
        }
    }
}

Output:

Volume is : 105
Area is : 15
Perimeter is : 16

Example to Understand HAS-A Relationship in C#

ุจุต ุนู„ู‰ ุงู„ู…ุซุงู„ ุงู„ู„ูŠ ุชุญุช. ู‡ู†ุงุŒ ุฌูˆู‡ Employee classุŒ ุนู…ู„ู†ุง ู…ุชุบูŠุฑ ู…ู† ู†ูˆุน AddressุŒ ูˆุฏู‡ ู…ุด ุฃูƒุชุฑ ู…ู† ุนู„ุงู‚ุฉ HAS-A ุจูŠู† Employee ูˆAddress. ูู†ู‚ุฏุฑ ู†ู‚ูˆู„ ุฅู† Employee HAS-A Address.

using System;
namespace IsAHasADemo
{
    public class Program
    {
        static void Main()
        {
            Address address = new Address("B1-3029", "BBSR", "Odisha");
            Employee employee = new Employee(1001, "Ramesh", address);
            employee.Display();
            Console.ReadKey();
        }
    }
    class Address
    {
        public string AddressLine, City, State;
        public Address(string addressLine, string city, string state)
        {
            AddressLine = addressLine;
            City = city;
            State = state;
        }
    }
    class Employee
    {
        // Using Address in Employee class
        // Establishing Has-A relationship i.e. Employee HAS-A Address   
        public Address address; 
        public int Id;
        public string Name;
        public Employee(int id, string name, Address adrs)
        {
            Id = id;
            Name = name;
            address = adrs;
        }
        public void Display()
        {
            Console.WriteLine($"Employee Id: {Id}");
            Console.WriteLine($"Employee Name: {Name}");
            Console.WriteLine($"AddressLine: {address.AddressLine}");
            Console.WriteLine($"City: {address.City}");
            Console.WriteLine($"State: {address.State}");
        }
    }
}

Output:

Employee Id: 1001
Employee Name: Ramesh
AddressLine: B1-3029
City: BBSR
State: Odisha

ููŠ ุงู„ู…ุซุงู„ ุงู„ู„ูŠ ููˆู‚ุŒ ู„ูˆ ุฎู„ูŠู†ุง Employee Class ูŠูˆุฑุซ ู…ู† Address classุŒ ูุฏู‡ ู…ุด ู‡ูŠูƒูˆู† ู„ูŠู‡ ุฃูŠ ู…ุนู†ู‰. ู„ูˆ ูˆุฑู‘ุซู†ุงู‡ุŒ ู‡ูŠู†ุดุฆ ุนู„ุงู‚ุฉ IS-A ุจูŠู† Employee ูˆAddress classesุŒ ูˆู…ููŠุด ู…ุนู†ู‰ ุฅู†ู†ุง ู†ู‚ูˆู„ Employee IS-A Address. ุจุงู„ุนูƒุณุŒ ู„ูˆ ุทุจู‚ู†ุง ุนู„ุงู‚ุฉ HAS-AุŒ ูุจูŠุจู‚ู‰ ู„ูŠู‡ุง ู…ุนู†ู‰ ุฅู†ู†ุง ู†ู‚ูˆู„ Employee HAS-A Address.

Differences Between IsA and HasA Relationship in C#

  • Nature of Relationship: IsA ู‡ูŠ ุนู„ุงู‚ุฉ inheritance (parent-child)ุŒ ุจูŠู†ู…ุง HasA ู‡ูŠ ุนู„ุงู‚ุฉ compositional (ุชูƒูˆูŠู†ูŠุฉ).
  • Coupling: IsA ุนุงุฏุฉู‹ ุจุชุนู†ูŠ ุชุฑุงุจุท ุฃู‚ูˆู‰ (stronger coupling) ุจูŠู† ุงู„ู€ classesุŒ ู„ุฅู† ุงู„ู€ derived class ุจูŠูƒูˆู† ู…ุฑุชุจุท ุจุดูƒู„ ูˆุซูŠู‚ ุจุงู„ู€ base class ุจุชุงุนู‡. HasA ุจุชุนู†ูŠ ุชุฑุงุจุท ุฃุถุนู (looser coupling)ุŒ ู„ุฅู† ุงู„ู€ objects ู…ู…ูƒู† ุชูƒูˆู† ู…ูˆุฌูˆุฏุฉ ุจุดูƒู„ ู…ุณุชู‚ู„.
  • Usage: IsA ุจุชูุณุชุฎุฏู… ู„ู…ุง class ูŠุญุชุงุฌ ูŠูƒูˆู† ุงู…ุชุฏุงุฏ ู„ู€ class ุชุงู†ูŠุŒ ูˆูŠูˆุฑุซ ุฎุตุงุฆุตู‡ ูˆุณู„ูˆูƒูŠุงุชู‡. HasA ุจุชูุณุชุฎุฏู… ู„ู…ุง class ูŠุญุชุงุฌ ูˆุธุงุฆู ุฃูˆ ุฎุตุงุฆุต ู…ุนูŠู†ุฉ ู…ูˆุฌูˆุฏุฉ ูˆู…ุชุบู„ูุฉ (encapsulated) ููŠ class ุชุงู†ูŠ.
  • Flexibility: ุงู„ู€ Composition (HasA) ุจูŠุฏูŠ ู…ุฑูˆู†ุฉ ุฃูƒุจุฑ ู„ุฅู† ุงู„ู…ูƒูˆู†ุงุช (components) ู…ู…ูƒู† ุงุณุชุจุฏุงู„ู‡ุง ุฃูˆ ุชุนุฏูŠู„ู‡ุง ุจุณู‡ูˆู„ุฉ ู…ู† ุบูŠุฑ ู…ุง ุชุฃุซุฑ ุนู„ู‰ ุงู„ู€ container class.

How do you decide what to implement between IS-A and HAS-A?

ุงุณุฃู„ ู†ูุณูƒ ุงู„ุณุคุงู„. ู…ุซู„ู‹ุงุŒ ู„ูˆ ุณุฃู„ุชูƒุŒ ุฃู†ู‡ูŠ ุฌู…ู„ุฉ ู„ูŠู‡ุง ู…ุนู†ู‰ ุฃูƒุชุฑ ู…ู† ุงู„ุฌู…ู„ุชูŠู† ุงู„ู„ูŠ ุชุญุช ุฏูˆู„ุŸ

  • Employee IS-A Address
  • Employee HAS-A Address

ุฃูƒูŠุฏ ู‡ุชู‚ูˆู„ ุฅู† Employee HAS-A Address ู„ูŠู‡ุง ู…ุนู†ู‰ ุฃูƒุชุฑ ู…ู† Employee IS-A Address.

ุทูŠุจ ู„ูˆ ุณุฃู„ุชูƒุŒ ุฃู†ู‡ูŠ ุฌู…ู„ุฉ ู„ูŠู‡ุง ู…ุนู†ู‰ ุฃูุถู„ ู…ู† ุงู„ุงุชู†ูŠู† ุฏูˆู„ุŸ

  • BMW IS-A Car
  • BMW HAS-A Car

ุฅุฌุงุจุชูƒ ุฃูƒูŠุฏ ู‡ุชูƒูˆู† BMW IS-A Car.

ู…ู„ุงุญุธุฉ: ููŠ C#ุŒ ุนู„ุงู‚ุฉ ุงู„ู€ IS-A ุจุชุชุนู…ู„ ุจุงุณุชุฎุฏุงู… ุงู„ู€ InheritanceุŒ ูˆุนู„ุงู‚ุฉ ุงู„ู€ HAS-A ุจุชุชุนู…ู„ ุจุงุณุชุฎุฏุงู… ุงู„ู€ CompositionุŒ ูŠุนู†ูŠ ุฅู†ูƒ ุชุนู„ู† ุนู† ู…ุชุบูŠุฑ. ููƒู„ ู…ุง ุจู†ุนู„ู† ุนู† ู…ุชุบูŠุฑ ู…ู† class ุฌูˆู‡ class ุชุงู†ูŠุŒ ุจู†ุณู…ูŠ ุฏู‡ CompositionุŒ ุฃูˆ ุชู‚ุฏุฑ ุชู‚ูˆู„ ุนู„ุงู‚ุฉ HAS-A.