Csharp/C Sharp/Class Interface/Class Access Modifiers
Содержание
Demonstrate protected
<source lang="csharp"> /* 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 }
}
</source>
illustrates member accessibility
<source lang="csharp"> /* 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); }
}
</source>
illustrates member hiding
<source lang="csharp"> /* 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(); }
}
</source>
Illustrates the use of various access modifiers
<source lang="csharp"> /* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110
- /
/*
Example5_10.cs illustrates the use of various access modifiers
- /
// declare the Car class class Car {
// declare the fields public string make; protected internal string model; internal string color; protected int horsepower = 150; private int yearBuilt; // define the methods public void SetYearBuilt(int yearBuilt) { this.yearBuilt = yearBuilt; } public int GetYearBuilt() { return yearBuilt; } public void Start() { System.Console.WriteLine("Starting car ..."); TurnStarterMotor(); System.Console.WriteLine("Car started"); } private void TurnStarterMotor() { System.Console.WriteLine("Turning starter motor ..."); }
}
public class Example5_10 {
public static void Main() { // create a Car object Car myCar = new Car(); // assign values to the Car object fields myCar.make = "Toyota"; myCar.model = "MR2"; myCar.color = "black"; // myCar.horsepower = 200; // protected field not accessible // myCar.yearBuilt = 1995; // private field not accessible // call the SetYearBuilt() method to set the private yearBuilt field myCar.SetYearBuilt(1995); // display the values for the Car object fields System.Console.WriteLine("myCar.make = " + myCar.make); System.Console.WriteLine("myCar.model = " + myCar.model); System.Console.WriteLine("myCar.color = " + myCar.color); // call the GetYearBuilt() method to get the private yearBuilt field System.Console.WriteLine("myCar.GetYearBuilt() = " + myCar.GetYearBuilt()); // call the Start() method myCar.Start(); // myCar.TurnStarterMotor(); // private method not accessible }
}
</source>
Member Accessibility
<source lang="csharp">
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(); }
}
</source>
Member Hiding
<source lang="csharp">
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(); }
}
</source>
Public vs private access
<source lang="csharp"> /* 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; }
}
</source>
Using Access Modifiers
<source lang="csharp">
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(); }
}
</source>