illustrates member hiding

image_pdfimage_print

   

/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy

Publisher: Sybex;
ISBN: 0782129110
*/
/*
  Example7_4.cs illustrates member hiding
*/

using System;


// declare the MotorVehicle class
class MotorVehicle
{

  // declare the fields
  public string make;
  public string model;

  // define a constructor
  public MotorVehicle(string make, string model)
  {
    Console.WriteLine("In MotorVehicle constructor");
    this.make = make;
    this.model = model;
    Console.WriteLine("this.make = " + this.make);
    Console.WriteLine("this.model = " + this.model);
  }

  // define the DisplayModel() method
  public void DisplayModel()
  {
    Console.WriteLine("In MotorVehicle DisplayModel() method");
    Console.WriteLine("model = " + model);
  }

}


// declare the Car class (derived from MotorVehicle)
class Car : MotorVehicle
{

  // hide the base class model field
  public new string model;

  // define a constructor
  public Car(string make, string model) :
  base(make, "Test")
  {
    Console.WriteLine("In Car constructor");
    this.model = model;
    Console.WriteLine("this.model = " + this.model);
  }

  // hide the base class DisplayModel() method
  public new void DisplayModel()
  {
    Console.WriteLine("In Car DisplayModel() method");
    Console.WriteLine("model = " + model);
    base.DisplayModel();  // calls DisplayModel() in the base class
  }

}


public class Example7_4
{

  public static void Main()
  {

    // create a Car object
    Console.WriteLine("Creating a Car object");
    Car myCar = new Car("Toyota", "MR2");

    Console.WriteLine("Back in Main() method");
    Console.WriteLine("myCar.make = " + myCar.make);
    Console.WriteLine("myCar.model = " + myCar.model);

    // call the Car object's DisplayModel() method
    Console.WriteLine("Calling myCar.DisplayModel()");
    myCar.DisplayModel();

  }

}


           
          


illustrates member accessibility

image_pdfimage_print

   

/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy

Publisher: Sybex;
ISBN: 0782129110
*/

/*
  Example7_3.cs illustrates member accessibility
*/

using System;


// declare the MotorVehicle class
class MotorVehicle
{

  // declare the fields
  private   string make;
  protected string model;

  // define a constructor
  public MotorVehicle(string make, string model)
  {
    this.make = make;
    this.model = model;
  }

  // define the Start() method (may be overridden in a
  // derived class)
  public virtual void Start()
  {
    TurnStarterMotor();
    System.Console.WriteLine("Vehicle started");
  }

  // define the TurnStarterMotor() method
  private void TurnStarterMotor()
  {
    System.Console.WriteLine("Turning starter motor...");
  }

}


// declare the Car class (derived from MotorVehicle)
class Car : MotorVehicle
{

  // define a constructor
  public Car(string make, string model) :
  base(make, model)
  {
    // do nothing
  }

  // override the base class Start() method
  public override void Start()
  {
    Console.WriteLine("Starting " + model);  // model accessible
    base.Start();  // calls the Start() method in the base class
    // Console.WriteLine("make = " + make);  // make is not accessible
  }

}


public class Example7_3
{

  public static void Main()
  {

    // create a Car object and call the object's Accelerate() method
    Car myCar = new Car("Toyota", "MR2");
    myCar.Start();

    // make and model are not accessible, so the following two lines
    // are commented out
    // Console.WriteLine("myCar.make = " + myCar.make);
    // Console.WriteLine("myCar.model = " + myCar.model);

  }

}

           
          


Public vs private access

image_pdfimage_print

   

/*
C#: The Complete Reference 
by Herbert Schildt 

Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/
// Public vs private access. 
 
using System; 
 
class MyClass {  
  private int alpha; // private access explicitly specified 
  int beta;          // private access by default 
  public int gamma;  // public access 
 
  /* Methods to access alpha and beta.  It is OK for a 
     member of a class to access a private member 
     of the same class. 
  */ 
  public void setAlpha(int a) { 
    alpha = a;  
  } 
 
  public int getAlpha() { 
    return alpha; 
  } 
 
  public void setBeta(int a) { 
    beta = a;  
  } 
 
  public int getBeta() { 
    return beta; 
  } 
}  
  
public class AccessDemo {  
  public static void Main() {  
    MyClass ob = new MyClass();  
  
    /* Access to alpha and beta is allowed only 
       through methods. */ 
    ob.setAlpha(-99); 
    ob.setBeta(19); 
    Console.WriteLine("ob.alpha is " + ob.getAlpha()); 
    Console.WriteLine("ob.beta is " + ob.getBeta()); 
 
    // You cannot access alpha or beta like this: 
//  ob.alpha = 10; // Wrong! alpha is private! 
//  ob.beta = 9;   // Wrong! beta is private! 
 
    // It is OK to directly access gamma because it is public. 
    ob.gamma = 99;  
   }  
}

           
          


Demonstrate protected

image_pdfimage_print

   

/*
C#: The Complete Reference 
by Herbert Schildt 

Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/


// Demonstrate protected. 
 
using System; 
 
class B { 
  protected int i, j; // private to B, but accessible by D 
 
  public void set(int a, int b) { 
    i = a; 
    j = b; 
  } 
 
  public void show() { 
    Console.WriteLine(i + " " + j); 
 } 
} 
 
class D : B { 
  int k; // private 
 
  // D can access B's i and j 
  public void setk() { 
     k = i * j; 
  } 
 
  public void showk() { 
    Console.WriteLine(k); 
  } 
} 
 
public class ProtectedDemo { 
  public static void Main() { 
    D ob = new D(); 
 
    ob.set(2, 3); // OK, known to D 
    ob.show();    // OK, known to D 
 
    ob.setk();  // OK, part of D 
    ob.showk(); // OK, part of D 
  } 
}


           
          


Member Hiding

image_pdfimage_print
   
 


using System;

public class MotorVehicle {
    public string make;
    public string model;

    public MotorVehicle(string make, string model) {
        Console.WriteLine("In MotorVehicle constructor");
        this.make = make;
        this.model = model;
        Console.WriteLine("this.make = " + this.make);
        Console.WriteLine("this.model = " + this.model);
    }

    public void DisplayModel() {
        Console.WriteLine("In MotorVehicle DisplayModel() method");
        Console.WriteLine("model = " + model);
    }
}


public class Product : MotorVehicle {
    public new string model;

    public Product(string make, string model) :
        base(make, "Test") {
        Console.WriteLine("In Product constructor");
        this.model = model;
        Console.WriteLine("this.model = " + this.model);
    }

    public new void DisplayModel() {
        Console.WriteLine("In Product DisplayModel() method");
        Console.WriteLine("model = " + model);
        base.DisplayModel();
    }

}


class MainClass {

    public static void Main() {
        Console.WriteLine("Creating a Product object");
        Product myProduct = new Product("Toyota", "MR2");

        Console.WriteLine("Back in Main() method");
        Console.WriteLine("myProduct.make = " + myProduct.make);
        Console.WriteLine("myProduct.model = " + myProduct.model);
        Console.WriteLine("Calling myProduct.DisplayModel()");
        myProduct.DisplayModel();

    }

}

    


Member Accessibility

image_pdfimage_print
   
 


using System;

public class MotorVehicle {
    private string make;
    protected string model;

    public MotorVehicle(string make, string model) {
        this.make = make;
        this.model = model;
    }
    public virtual void Start() {
        TurnStarterMotor();
        System.Console.WriteLine("Vehicle started");
    }

    private void TurnStarterMotor() {
        System.Console.WriteLine("Turning starter motor...");
    }
}

public class Product : MotorVehicle {
    public Product(string make, string model) :
        base(make, model) {
        // do nothing
    }
    public override void Start() {
        Console.WriteLine("Starting " + model);
        base.Start();
    }
}
class MainClass {
    public static void Main() {

        Product myProduct = new Product("Toyota", "MR2");
        myProduct.Start();
    }

}

    


Using Access Modifiers

image_pdfimage_print
   
 


public class Product {

    public string make;
    protected internal string model;
    internal string color;
    protected int horsepower = 150;
    private int yearBuilt;

    public void SetYearBuilt(int yearBuilt) {
        this.yearBuilt = yearBuilt;
    }

    public int GetYearBuilt() {
        return yearBuilt;
    }

    public void Start() {
        System.Console.WriteLine("Starting Product ...");
        TurnStarterMotor();
        System.Console.WriteLine("Product started");
    }

    private void TurnStarterMotor() {
        System.Console.WriteLine("Turning starter motor ...");
    }

}


class MainClass {

    public static void Main() {

        Product myProduct = new Product();

        myProduct.make = "Toyota";
        myProduct.model = "MR2";
        myProduct.color = "black";


        myProduct.SetYearBuilt(1995);

        System.Console.WriteLine("myProduct.make = " + myProduct.make);
        System.Console.WriteLine("myProduct.model = " + myProduct.model);
        System.Console.WriteLine("myProduct.color = " + myProduct.color);

        System.Console.WriteLine("myProduct.GetYearBuilt() = " + myProduct.GetYearBuilt());

        myProduct.Start();
    }
}