Csharp/CSharp Tutorial/Class/Class hierarchy

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

A multilevel hierarchy.

<source lang="csharp">using System;

class Shape {

 double pri_width;  // private 
 double pri_height; // private  

 // Default constructor. 
 public Shape() { 
   width = height = 0.0; 
 } 

 // Constructor for Shape. 
 public Shape(double w, double h) { 
   width = w; 
   height = h; 
 } 

 // Construct object with equal width and height. 
 public Shape(double x) { 
   width = height = x; 
 } 

 // Properties for width and height. 
 public double width { 
    get { return pri_width; } 
    set { pri_width = value; } 
 } 

 public double height { 
    get { return pri_height; } 
    set { pri_height = value; } 
 } 

 public void showDim() { 
   Console.WriteLine("Width and height are " + 
                      width + " and " + height); 
 } 

}

class Triangle : Shape {

 string style; // private 
  
 /* A default constructor. This invokes the default 
    constructor of Shape. */ 
 public Triangle() { 
   style = "null"; 
 } 

 // Constructor 
 public Triangle(string s, double w, double h) : base(w, h) { 
   style = s;  
 } 

 // Construct an isosceles triangle. 
 public Triangle(double x) : base(x) { 
   style = "isosceles";  
 } 

 // Return area of triangle. 
 public double area() { 
   return width * height / 2; 
 } 

 // Display a triangle"s style. 
 public void showStyle() { 
   Console.WriteLine("Triangle is " + style); 
 } 

}

class ColorTriangle : Triangle {

 string color; 

 public ColorTriangle(string c, string s, 
                      double w, double h) : base(s, w, h) { 
   color = c; 
 } 

 // Display the color. 
 public void showColor() { 
   Console.WriteLine("Color is " + color); 
 } 

}

class MainClass {

 public static void Main() { 
   ColorTriangle t1 = new ColorTriangle("Blue", "right", 8.0, 12.0); 
   ColorTriangle t2 = new ColorTriangle("Red", "isosceles", 2.0, 2.0); 

   Console.WriteLine("Info for t1: "); 
   t1.showStyle(); 
   t1.showDim(); 
   t1.showColor(); 
   Console.WriteLine("Area is " + t1.area()); 

   Console.WriteLine(); 

   Console.WriteLine("Info for t2: "); 
   t2.showStyle(); 
   t2.showDim(); 
   t2.showColor(); 
   Console.WriteLine("Area is " + t2.area()); 
 } 

}</source>

Info for t1:
Triangle is right
Width and height are 8 and 12
Color is Blue
Area is 48
Info for t2:
Triangle is isosceles
Width and height are 2 and 2
Color is Red
Area is 2

A simple class hierarchy.

  1. A class that is inherited is called a base class.
  2. The inheriting class is called a derived class.
  3. A derived class is a specialized version of a base class.
  4. A derived class has all of the variables, methods, properties, operators, and indexers from the base class
  5. A derived class adds its own unique elements.

The general form of a class declaration that inherits a base class:


<source lang="csharp">class derived-class-name : base-class-name {

   // body of class

}</source>

Demonstrate when constructors are called.

The general form of calling base constructor:


<source lang="csharp">derived-constructor(parameter-list) : base(arg-list) {

   // body of constructor

}</source>

Inherited Implementation

<source lang="csharp">using System;

interface Interface1 {

    void PrintOut(string s); 

} class BaseClass {

  public void PrintOut(string s)      
  {
     Console.WriteLine("Calling through: {0}", s);
  }

} class Derived : BaseClass, Interface1 { } class MainClass {

  static void Main()
  {
     Derived d = new Derived();       
     d.PrintOut("object.");           
  }

}</source>

Calling through: object.

Simple Inheritance

<source lang="csharp">using System; class Employee {

   public Employee(string name, float billingRate)
   {
       this.name = name;
       this.billingRate = billingRate;
   }
   
   public float CalculateCharge(float hours)
   {
       return(hours * billingRate);
   }
   
   public string TypeName()
   {
       return("Employee");
   }
   
   private string name;
   protected float billingRate;

} class Manager: Employee {

   public Manager(string name, float billingRate) : base(name, billingRate)
   {
   }
   public new float CalculateCharge(float hours)
   {
       if (hours < 1.0F)
       hours = 1.0F;
       return(hours * billingRate);
   }
   public new string TypeName()
   {
       return("Civil Employee");
   }

} class Test {

   public static void Main()
   {
       Employee    e = new Employee("A", 15.50F);
       Manager    c = new Manager("B", 40F);
       
       Console.WriteLine("{0} charge = {1}",
       e.TypeName(),
       e.CalculateCharge(2F));
       Console.WriteLine("{0} charge = {1}",
       c.TypeName(),
       c.CalculateCharge(0.75F));
   }

}</source>

Employee charge = 31
Civil Employee charge = 40