Csharp/C Sharp/Class Interface/Class Definition
Содержание
- 1 A program that uses the Building class
- 2 A Simple C# Class
- 3 A simple inventory example
- 4 Assign value to class
- 5 Create class
- 6 Declare class and use it
- 7 Declaring and Defining Classes
- 8 Declaring Class Instances
- 9 Demonstrate the use of a nested class to contain data
- 10 Illustrates hiding
- 11 Illustrates how to assign default values to fields using initializers
- 12 Illustrates how to declare classes, object references, and create objects
- 13 illustrates how to use a "has a" relationship
- 14 Illustrates nested classes
- 15 Multiple constructors in a class definition
- 16 Return an object
- 17 Show name hiding in a derived class
- 18 simulate a bank account
- 19 This program creates two Building objects
- 20 Uses a class from Example16_3a.cs
- 21 Using Initializers
- 22 Variable in and out a class
A program that uses the Building class
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// A program that uses the Building class.
using System;
class Building {
public int floors; // number of floors public int area; // total square footage of building public int occupants; // number of occupants
}
// This class declares an object of type Building. public class BuildingDemo {
public static void Main() { Building house = new Building(); // create a Building object int areaPP; // area per person // assign values to fields in house house.occupants = 4; house.area = 2500; house.floors = 2; // compute the area per person areaPP = house.area / house.occupants; Console.WriteLine("house has:\n " + house.floors + " floors\n " + house.occupants + " occupants\n " + house.area + " total area\n " + areaPP + " area per person"); }
}
</source>
A Simple C# Class
<source lang="csharp"> using System; public class ASimpleClass {
public static void Main() { Point myPoint = new Point(10, 15); Console.WriteLine("myPoint.x {0}", myPoint.x); Console.WriteLine("myPoint.y {0}", myPoint.y); }
} class Point {
// constructor public Point(int x, int y) { this.x = x; this.y = y; } // member fields public int x; public int y;
}
</source>
A simple inventory example
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// A simple inventory example.
using System; using System.Collections;
class Inventory {
string name; double cost; int onhand; public Inventory(string n, double c, int h) { name = n; cost = c; onhand = h; } public override string ToString() { return String.Format("{0,-10}Cost: {1,6:C} On hand: {2}", name, cost, onhand); }
}
public class InventoryList {
public static void Main() { ArrayList inv = new ArrayList(); // Add elements to the list inv.Add(new Inventory("Pliers", 5.95, 3)); inv.Add(new Inventory("Wrenches", 8.29, 2)); inv.Add(new Inventory("Hammers", 3.50, 4)); inv.Add(new Inventory("Drills", 19.88, 8)); Console.WriteLine("Inventory list:"); foreach(Inventory i in inv) { Console.WriteLine(" " + i); } }
}
</source>
Assign value to class
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// This program will not compile.
class X {
int a; public X(int i) { a = i; }
}
class Y {
int a; public Y(int i) { a = i; }
}
public class IncompatibleRef {
public static void Main() { X x = new X(10); X x2; Y y = new Y(5); x2 = x; // OK, both of same type x2 = y; // Error, not of same type }
}
</source>
Create class
<source lang="csharp"> /* Learning C# by Jesse Liberty Publisher: O"Reilly ISBN: 0596003765
- /
using System; public class MyTime { // private variables private int year; private int month; private int date; private int hour; private int minute; private int second; // public methods public void DisplayCurrentMyTime() { Console.WriteLine( "stub for DisplayCurrentMyTime"); } } public class Tester { static void Main() { MyTime timeObject = new MyTime(); timeObject.DisplayCurrentMyTime(); } } </source>
Declare class and use it
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
using System;
class Rect {
public int width; public int height; public Rect(int w, int h) { width = w; height = h; } public int area() { return width * height; }
}
public class UseRect {
public static void Main() { Rect r1 = new Rect(4, 5); Rect r2 = new Rect(7, 9); Console.WriteLine("Area of r1: " + r1.area()); Console.WriteLine("Area of r2: " + r2.area()); }
}
</source>
Declaring and Defining Classes
<source lang="csharp"> /*
* C# Programmers Pocket Consultant * Author: Gregory S. MacBeth * Email: gmacbeth@comporium.net * Create Date: June 27, 2003 * Last Modified Date: */
using System; namespace Client.Chapter_5___Building_Your_Own_Classes {
public class DeclaringandDefiningClasses { static private int MyInt = 5; static public int MyInt2 = 10; static public int[] MyIntArray; static private int ObjectCount = 0; static void Main(string[] args) { MyIntArray = new int[10]; ObjectCount++; } public static int MyMethod(int myInt) { MyInt = MyInt + myInt; return MyInt; } private static long MyLongMethod(ref int myInt) { return myInt; } }
}
</source>
Declaring Class Instances
<source lang="csharp"> /*
* C# Programmers Pocket Consultant * Author: Gregory S. MacBeth * Email: gmacbeth@comporium.net * Create Date: June 27, 2003 * Last Modified Date: */
using System; namespace Client.Chapter_5___Building_Your_Own_Classes {
public class DeclaringClassInstances { static void Main(string[] args) { ClassInstantied MyClass = new ClassInstantied(); } } class ClassInstantied { public void Display() { Console.WriteLine("Hello World"); } }
}
</source>
Demonstrate the use of a nested class to contain data
<source lang="csharp"> /* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794
- /
// // Nested.cs -- demonstrate the use of a nested class to contain data // // Compile this program with the following command line // C:>csc Nested.cs // namespace nsReadOnly {
using System; public class Nested { static double DegreeFactor = 1; static double MilFactor = 0.05625; static double RadianFactor = 57.29578; static public void Main () { double angle = 90; double radius = 50; // Declare an instance of the nested class clsArea.clsData data = new clsArea.clsData (angle, radius, DegreeFactor); clsArea InDegrees = new clsArea (data); // Change the values to mils data.Factor = MilFactor; data.Angle = angle * 17.77778; clsArea InMils = new clsArea (data); // Change the values to radians data.Angle = angle / 57.29578; data.Factor = RadianFactor; clsArea InRadians = new clsArea (data); Console.WriteLine ("Area of pie of {0,0:F3} degrees is {1,0:F1}", InDegrees.Data.Angle, InDegrees.Area); Console.WriteLine ("Area of pie of {0,0:F3} radians is {1,0:F1}", InRadians.Data.Angle, InRadians.Area); Console.WriteLine ("Area of pie of {0,0:F3} mils is {1,0:F1}", InMils.Data.Angle, InMils.Area); } } class clsArea { public class clsData : ICloneable { public clsData (double angle, double radius, double factor) { m_Angle = angle; m_Radius = radius; m_Factor = factor / 57.29578; } public double Angle { get {return(m_Angle);} set {m_Angle = value;} } public double Radius { get {return(m_Radius);} set {m_Radius = value;} } public double Factor { get {return(m_Factor);} set {m_Factor = value / 57.29578;} } private double m_Angle = 0; private double m_Radius = 0; private double m_Factor = 1; public object Clone () { clsData clone = new clsData (m_Angle, m_Radius, m_Factor * 57.29578); return (clone); } } public clsArea (clsData data) { // Clone the data object to get a copy for ourselves m_Data = (clsData) data.Clone(); } public clsData Data { get {return (m_Data);} } private clsData m_Data; private const double pi = 3.14159; private const double radian = 57.29578; public double Area { get { return (m_Data.Radius * m_Data.Radius * pi * m_Data.Angle * m_Data.Factor / (2 * pi)); } } }
}
</source>
Illustrates hiding
<source lang="csharp"> /* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110
- /
/*
Example5_4.cs illustrates hiding
- /
// declare the Car class class Car {
public int yearBuilt; public double maximumSpeed; public int Age(int currentYear) { int maximumSpeed = 100; // hides the field System.Console.WriteLine("In Age(): maximumSpeed = " + maximumSpeed); int age = currentYear - yearBuilt; return age; } public double Distance(double initialSpeed, double time) { System.Console.WriteLine("In Distance(): maximumSpeed = " + maximumSpeed); return (initialSpeed + maximumSpeed) / 2 * time; }
}
public class Example5_4 {
public static void Main() { // create a Car object Car redPorsche = new Car(); redPorsche.yearBuilt = 2000; redPorsche.maximumSpeed = 150; int age = redPorsche.Age(2001); System.Console.WriteLine("redPorsche is " + age + " year old."); System.Console.WriteLine("redPorsche travels " + redPorsche.Distance(31, .25) + " miles."); }
}
</source>
Illustrates how to assign default values to fields using initializers
<source lang="csharp"> /* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110
- /
/*
Example5_2.cs illustrates how to assign default values to fields using initializers
- /
// declare the Car class class Car {
// declare the fields public string make = "Ford"; public string model = "T"; public string color; // default value of null public int yearBuilt = 1910; // define the methods public void Start() { System.Console.WriteLine(model + " started"); } public void Stop() { System.Console.WriteLine(model + " stopped"); }
}
public class Example5_2 {
public static void Main() { // create a Car object Car myCar = new Car(); // display the default values for the Car object fields System.Console.WriteLine("myCar.make = " + myCar.make); System.Console.WriteLine("myCar.model = " + myCar.model); if (myCar.color == null) { System.Console.WriteLine("myCar.color is null"); } System.Console.WriteLine("myCar.yearBuilt = " + myCar.yearBuilt); }
}
</source>
Illustrates how to declare classes, object references, and create objects
<source lang="csharp"> /* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110
- /
/*
Example5_1.cs illustrates how to declare classes, object references, and create objects
- /
// declare the Car class class Car {
// declare the fields public string make; public string model; public string color; public int yearBuilt; // define the methods public void Start() { System.Console.WriteLine(model + " started"); } public void Stop() { System.Console.WriteLine(model + " stopped"); }
}
public class Example5_1 {
public static void Main() { // declare a Car object reference named myCar Car myCar; // create a Car object, and assign its address to myCar System.Console.WriteLine("Creating a Car object and assigning " + "its memory location to myCar"); myCar = new Car(); // assign values to the Car object"s fields using myCar myCar.make = "Toyota"; myCar.model = "MR2"; myCar.color = "black"; myCar.yearBuilt = 1995; // display the field values using myCar System.Console.WriteLine("myCar details:"); System.Console.WriteLine("myCar.make = " + myCar.make); System.Console.WriteLine("myCar.model = " + myCar.model); System.Console.WriteLine("myCar.color = " + myCar.color); System.Console.WriteLine("myCar.yearBuilt = " + myCar.yearBuilt); // call the methods using myCar myCar.Start(); myCar.Stop(); // declare another Car object reference and // create another Car object System.Console.WriteLine("Creating another Car object and " + "assigning its memory location to redPorsche"); Car redPorsche = new Car(); redPorsche.make = "Porsche"; redPorsche.model = "Boxster"; redPorsche.color = "red"; redPorsche.yearBuilt = 2000; System.Console.WriteLine("redPorsche is a " + redPorsche.model); // change the object referenced by the myCar object reference // to the object referenced by redPorshe System.Console.WriteLine("Assigning redPorsche to myCar"); myCar = redPorsche; System.Console.WriteLine("myCar details:"); System.Console.WriteLine("myCar.make = " + myCar.make); System.Console.WriteLine("myCar.model = " + myCar.model); System.Console.WriteLine("myCar.color = " + myCar.color); System.Console.WriteLine("myCar.yearBuilt = " + myCar.yearBuilt); // assign null to myCar (myCar will no longer reference an object) myCar = null; }
}
</source>
illustrates how to use a "has a" relationship
<source lang="csharp"> /* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110
- /
/*
Example6_5.cs illustrates how to use a "has a" relationship
- /
// declare the Engine class class Engine {
// declare the fields public int cylinders; public int horsepower; // define the method public void Start() { System.Console.WriteLine("Engine started"); }
}
// declare the Car class class Car {
// declare the fields public string make; public Engine engine; // Car has an Engine // define the method public void Start() { engine.Start(); }
}
public class Example6_5 {
public static void Main() { // declare a Car object reference named myCar System.Console.WriteLine("Creating a Car object"); Car myCar = new Car(); myCar.make = "Toyota"; // Car objects have an Engine object System.Console.WriteLine("Creating an Engine object"); myCar.engine = new Engine(); myCar.engine.cylinders = 4; myCar.engine.horsepower = 180; // display the values for the Car and Engine object fields 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); // call the Car object"s Start() method myCar.Start(); }
}
</source>
Illustrates nested classes
<source lang="csharp"> /* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110
- /
/*
Example6_6.cs illustrates nested classes
- /
// declare the Car class class Car {
// declare the Engine class public class Engine { // declare the Engine fields public int cylinders; public int horsepower; // define the Engine method public void Start() { System.Console.WriteLine("Engine started"); } } // declare the Car fields public string make; public Engine engine; // Car has an Engine // define the Car method public void Start() { engine.Start(); }
}
public class Example6_6 {
public static void Main() { // declare a Car object reference named myCar System.Console.WriteLine("Creating a Car object"); Car myCar = new Car(); myCar.make = "Toyota"; // Car objects have an Engine object System.Console.WriteLine("Creating an Engine object"); myCar.engine = new Car.Engine(); myCar.engine.cylinders = 4; myCar.engine.horsepower = 180; // display the values for the Car and Engine object fields 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); // call the Car object"s Start() method myCar.Start(); }
}
</source>
Multiple constructors in a class definition
<source lang="csharp"> /* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794
- /
// Constrct.cs - Demonstrates the use of multiple constructors // in a class definition. // // Compile this program with the following command line: // C:>csc Constrct.cs // namespace nsConstructor {
using System; struct POINT { public POINT (int cx, int cy) { this.cx = cx; this.cy = cy; } public int cx; public int cy; } public class Constrct { static public void Main () { clsRect rc1 = new clsRect(); clsRect rc2 = new clsRect (10, 12, 84, 96); POINT pt1 = new POINT (10, 12); POINT pt2 = new POINT (84, 96); clsRect rc3 = new clsRect (pt1, pt2); } } class clsRect {
// The following constructor replaces the default constructor
public clsRect () { Console.WriteLine ("Default constructor called"); m_Left = m_Top = m_Right = m_Bottom = 0; } public clsRect (int cx1, int cy1, int cx2, int cy2) { Console.WriteLine ("Constructor 1 called"); m_Left = cx1; m_Top = cy1; m_Right = cx2; m_Bottom = cy2; } public clsRect (POINT pt1, POINT pt2) { Console.WriteLine ("Constructor 2 called"); m_Left = pt1.cx; m_Top = pt1.cy; m_Right = pt2.cx; m_Bottom = pt2.cy; } public POINT UpperLeft { get {return(new POINT(m_Left, m_Top));} set {m_Left = value.cx; m_Top = value.cy;} } public POINT LowerRight { get {return(new POINT(m_Right, m_Bottom));} set {m_Right = value.cx; m_Bottom = value.cy;} } private int m_Left; private int m_Top; private int m_Right; private int m_Bottom; }
}
</source>
Return an object
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Return an object.
using System;
class Rect {
int width; int height; public Rect(int w, int h) { width = w; height = h; } public int area() { return width * height; } public void show() { Console.WriteLine(width + " " + height); } /* Return a rectangle that is a specified factor larger than the invoking rectangle. */ public Rect enlarge(int factor) { return new Rect(width * factor, height * factor); }
}
public class RetObj {
public static void Main() { Rect r1 = new Rect(4, 5); Console.Write("Dimensions of r1: "); r1.show(); Console.WriteLine("Area of r1: " + r1.area()); Console.WriteLine(); // create a rectange that is twice as big as r1 Rect r2 = r1.enlarge(2); Console.Write("Dimensions of r2: "); r2.show(); Console.WriteLine("Area of r2 " + r2.area()); }
}
</source>
Show name hiding in a derived class
<source lang="csharp"> /* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794
- /
// // Hide.cs -- Show name hiding in a derived class // // Compile this program with the following command line: // C:>csc Hide.cs // namespace nsHide {
using System; using System.Reflection; public class Hide { static public void Main () { clsBase Base = new clsBase(); clsDerived Derived = new clsDerived (); Base.x = 42; Derived.x = 42; Console.WriteLine ("For the base class:"); Console.WriteLine ("\tThe type stored in clsBase is " + Base.TypeOf()); Console.WriteLine ("\tMathOp () returns {0,0:F3} for {1}", Base.MathOp(42), 42); Console.WriteLine ("\r\nFor the derived class:"); Console.WriteLine ("\tThe type stored in clsDerived is " + Derived.TypeOf()); Console.WriteLine ("\tMathOp () returns {0,0:F3} for {1}", Derived.MathOp(42), 42); } } class clsBase { protected int m_x; public int x { get {return (x);} set {m_x = value;} } public double MathOp (int val) { return (Math.Sqrt ((double) val)); } public string TypeOf () { return ("integer"); } } class clsDerived : clsBase { new protected double m_x; new public double x { get {return (x);} set {m_x = value;} } new public double MathOp (int val) { return ((double) (val * val)); } new public string TypeOf () { return ("long"); } }
}
</source>
simulate a bank account
<source lang="csharp"> using System; public class BankAccount {
public static int nNextAccountNumber = 1000; public int nAccountNumber; public double dBalance; public void InitBankAccount() { nAccountNumber = ++nNextAccountNumber; dBalance = 0.0; } public void Deposit(double dAmount) { if (dAmount > 0.0) { dBalance += dAmount; } } public double Withdraw(double dWithdrawal) { if (dBalance <= dWithdrawal) { dWithdrawal = dBalance; } dBalance -= dWithdrawal; return dWithdrawal; }
}
</source>
This program creates two Building objects
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// This program creates two Building objects.
using System;
class Building {
public int floors; // number of floors public int area; // total square footage of building public int occupants; // number of occupants
}
// This class declares two objects of type Building. public class BuildingDemo1 {
public static void Main() { Building house = new Building(); Building office = new Building(); int areaPP; // area per person // assign values to fields in house house.occupants = 4; house.area = 2500; house.floors = 2; // assign values to fields in office office.occupants = 25; office.area = 4200; office.floors = 3; // compute the area per person in house areaPP = house.area / house.occupants; Console.WriteLine("house has:\n " + house.floors + " floors\n " + house.occupants + " occupants\n " + house.area + " total area\n " + areaPP + " area per person"); Console.WriteLine(); // compute the area per person in office areaPP = office.area / office.occupants; Console.WriteLine("office has:\n " + office.floors + " floors\n " + office.occupants + " occupants\n " + office.area + " total area\n " + areaPP + " area per person"); }
}
</source>
Uses a class from Example16_3a.cs
<source lang="csharp"> /* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110
- /
/*
Example16_3b.cs uses a class from Example16_3a.cs
- /
using System; using StringSwitch; // name space define in Example16_3c.cs public class Example16_3b {
public static void Main() { string localString; MySwitch s = new MySwitch(); s.inString="abcdef"; s.upper(out localString); Console.WriteLine(localString); }
} //=========================================================== /*
Example16_3c.cs provides manifest information for Example 16_3
- /
using System.Reflection; [assembly: AssemblyTitle("Example 16.3")] [assembly: AssemblyVersion("1.0.0.0")]
//=========================================================== /*
Example16_3a.cs creates a namespace with a single class
- /
using System; namespace StringSwitch {
class MySwitch { string privateString; public string inString { get { return privateString; } set { privateString = value; } } public void upper(out string upperString) { upperString = privateString.ToUpper(); } }
}
</source>
Using Initializers
<source lang="csharp">
public class Product {
public string make = "Ford"; public string model = "T"; public string color; // default value of null public int yearBuilt = 1910; public void Start() { System.Console.WriteLine(model + " started"); } public void Stop() { System.Console.WriteLine(model + " stopped"); }
} class MainClass {
public static void Main() { Product myProduct = new Product(); System.Console.WriteLine("myProduct.make = " + myProduct.make); System.Console.WriteLine("myProduct.model = " + myProduct.model); if (myProduct.color == null) { System.Console.WriteLine("myProduct.color is null"); } System.Console.WriteLine("myProduct.yearBuilt = " + myProduct.yearBuilt); }
}
</source>
Variable in and out a class
<source lang="csharp"> /* Learning C# by Jesse Liberty Publisher: O"Reilly ISBN: 0596003765
- /
using System; namespace heap { public class Dog { public int weight; } public class TesterClass { public void Run() { // create an integer int firstInt = 5; // create a second integer int secondInt = firstInt; // display the two integers Console.WriteLine("firstInt: {0} secondInt: {1}", firstInt, secondInt); // modify the second integer secondInt = 7; // display the two integers Console.WriteLine("firstInt: {0} secondInt: {1}", firstInt, secondInt); // create a dog Dog milo = new Dog(); // assign a value to weight milo.weight = 5; // create a second reference to the dog Dog fido = milo; // display their values Console.WriteLine("Milo: {0}, fido: {1}", milo.weight, fido.weight); // assign a new weight to the second reference fido.weight = 7; // display the two values Console.WriteLine("Milo: {0}, fido: {1}", milo.weight, fido.weight); } static void Main() { TesterClass t = new TesterClass(); t.Run(); } } } </source>