Csharp/CSharp Tutorial/Class/Class hierarchy — различия между версиями

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

Версия 15:31, 26 мая 2010

A multilevel hierarchy.

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()); 
  } 
}
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:


class derived-class-name : base-class-name {
    // body of class
}

Demonstrate when constructors are called.

The general form of calling base constructor:


derived-constructor(parameter-list) : base(arg-list) {
    // body of constructor
}

Inherited Implementation

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.");           
   }
}
Calling through: object.

Simple Inheritance

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));
    }
}
Employee charge = 31
Civil Employee charge = 40