Csharp/CSharp Tutorial/Class/Member Variable

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

A class with method and member variables

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

   // constructor
   public Employee(string name, float billingRate)
   {
       this.name = name;
       this.billingRate = billingRate;
   }
   // figure out the charge based on Employee"s rate
   public float CalculateCharge(float hours)
   {
       return(hours * billingRate);
   }
   // return the name of this type
   public string TypeName()
   {
       return("Employee");
   }
   
   private string name;
   protected float billingRate;

} class MainClass {

   public static void Main()
   {
       Employee Employee = new Employee("A", 21.20F);
       Console.WriteLine("Name is: {0}", Employee.TypeName());
   }

}</source>

Name is: Employee

Add a method to access the field variables

<source lang="csharp">using System;

class Building {

 public int area;     
 public int occupants;

 
 public void areaPerPerson() {  
   Console.WriteLine("Display the area per person.");
   Console.WriteLine("  " + area / occupants + 
                     " area per person"); 
 }  

}

class BuildingDemo {

 public static void Main() {   
   Building house = new Building();   
   Building office = new Building(); 

   house.occupants = 4;  
   house.area = 2500;  

   // assign values to fields in office 
   office.occupants = 25;  
   office.area = 4200;  
  
   Console.WriteLine("house has:\n  " + 
                     house.occupants + " occupants\n  " + 
                     house.area + " total area"); 
   house.areaPerPerson(); 

   Console.WriteLine(); 

   Console.WriteLine("office has:\n  " + 
                     office.occupants + " occupants\n  " + 
                     office.area + " total area"); 
   office.areaPerPerson(); 
 }   

}</source>

house has:
  4 occupants
  2500 total area
Display the area per person.
  625 area per person
office has:
  25 occupants
  4200 total area
Display the area per person.
  168 area per person

Call base constructor to init member variables

<source lang="csharp">public class A {

  public A( int x )
  {
     this.x = x;
  }
  public A() : this( 0 )
  {
  }
  internal int x;

} public class B : A {

  public B() : base( 1 )
  {
  }

} public class MainClass {

  static void Main()
  {
     B b = new B();
     System.Console.WriteLine( "A.x = {0}", b.x );
  }

}</source>

A.x = 1

field initialization

<source lang="csharp">class FieldInitExample

   {
       int x = 5;
       int y;
       public FieldInitExample() : this(5)
       {
       }
       public FieldInitExample(int y)
       {
           this.y = y;
       }
   }</source>

fields

<source lang="csharp">class FieldExample {

   private static int idCounter;
   protected int id;
   public string name;
   public int x;
   public int y;
   private System.DateTime createDate;

}</source>

How to use a "has a" relationship

<source lang="csharp">public class Engine {

 public int cylinders;
 public int horsepower;
 public void Start()
 {
   System.Console.WriteLine("Engine started");
 }

} public class Car {

 public string make;
 public Engine engine;  // Car has an Engine
 public void Start()
 {
   engine.Start();
 }

} class MainClass {

 public static void Main()
 {
   System.Console.WriteLine("Creating a Car object");
   Car myCar = new Car();
   myCar.make = "Toyota";
   System.Console.WriteLine("Creating an Engine object");
   myCar.engine = new Engine();
   myCar.engine.cylinders = 4;
   myCar.engine.horsepower = 180;
   System.Console.WriteLine("myCar.make = " + myCar.make);
   System.Console.WriteLine("myCar.engine.cylinders = " + myCar.engine.cylinders);
   System.Console.WriteLine("myCar.engine.horsepower = " + myCar.engine.horsepower);
   myCar.Start();
 }

}</source>

Creating a Car object
Creating an Engine object
myCar.make = Toyota
myCar.engine.cylinders = 4
myCar.engine.horsepower = 180
Engine started

Illustrates how to assign default values to fields using initializers

<source lang="csharp">class PC {

 public string make = "AAA";
 public string model = "T";
 public string color;
 public int yearBuilt = 1910;
 public void Start()
 {
   System.Console.WriteLine(yearBuilt + " yearBuilt");
 }

} class MainClass {

 public static void Main()
 {
   PC myPC = new PC();
   System.Console.WriteLine("myPC.make = " + myPC.make);
   System.Console.WriteLine("myPC.model = " + myPC.model);
   if (myPC.color == null)
   {
     System.Console.WriteLine("myPC.color is null");
   }
   System.Console.WriteLine("myPC.yearBuilt = " + myPC.yearBuilt);
 }

}</source>

myPC.make = AAA
myPC.model = T
myPC.color is null
myPC.yearBuilt = 1910

Use this and base together to init a class

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

  public Base( int x )
  {
     Console.WriteLine( "Base.Base(int)" );
     this.x = x;
  }
  
  public int x = 0;

} class Derived : Base {

  public Derived( int a ):base( a )
  {
     Console.WriteLine( "Derived.Derived(int)" );
     this.a = a;
  }
  public Derived( int a, int b ):this( a )
  {
     Console.WriteLine( "Derived.Derived(int, int)" );
     this.a = a;
     this.b = b;
  }
  public int a = 0;
  public int b = 0;

} public class MainClass {

  static void Main()
  {
     Derived b = new Derived( 1, 2 );
  }

}</source>

Base.Base(int)
Derived.Derived(int)
Derived.Derived(int, int)