/* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852 */ using System; public class AnotherStaticError { // non-static method. void nonStaticMeth() { Console.WriteLine("Inside nonStaticMeth()."); } /* Error! Can't directly call a non-static method from within a static method. */ static void staticMeth() { nonStaticMeth(); // won't compile } }
Static members are frequently used as counters.
using System; public class Starter { public static void Main() { MyClass<int> obj1 = new MyClass<int>(); MyClass<double> obj2 = new MyClass<double>(); MyClass<double> obj3 = new MyClass<double>(); MyClass<int>.Count(obj1); MyClass<double>.Count(obj2); } } public class MyClass<T> { public MyClass() { ++counter; } public static void Count(MyClass<T> _this) { Console.WriteLine("{0} : {1}", _this.GetType().ToString(), counter.ToString()); } private static int counter = 0; }
Use static
/* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852 */ // Use static. using System; class StaticDemo { // a static variable public static int val = 100; // a static method public static int valDiv2() { return val/2; } } public class SDemo { public static void Main() { Console.WriteLine("Initial value of StaticDemo.val is " + StaticDemo.val); StaticDemo.val = 8; Console.WriteLine("StaticDemo.val is " + StaticDemo.val); Console.WriteLine("StaticDemo.valDiv2(): " + StaticDemo.valDiv2()); } }
Sealed Methods
using System; public class Name { public string firstName; public string lastName; public Name(string firstName, string lastName) { this.firstName = firstName; this.lastName = lastName; } public virtual void Accelerate() { Console.WriteLine("In Name Accelerate() method"); Console.WriteLine(lastName + " accelerating"); } } public class MyName : Name { public MyName(string firstName, string lastName) : base(firstName, lastName) { } sealed public override void Accelerate() { Console.WriteLine("In MyName Accelerate() method"); Console.WriteLine(lastName + " accelerating"); } } class Test{ public static void Main() { Console.WriteLine("Creating a MyName object"); MyName myMyName = new MyName("Toyota", "MR2"); // call the MyName object's Accelerate() method Console.WriteLine("Calling myMyName.Accelerate()"); myMyName.Accelerate(); } }
Illustrates sealed methods
/* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110 */ /* Example7_10.cs illustrates sealed methods */ 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) { this.make = make; this.model = model; } // define the Accelerate() method public virtual void Accelerate() { Console.WriteLine("In MotorVehicle Accelerate() method"); Console.WriteLine(model + " accelerating"); } } // 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 Accelerate() method (sealed) sealed public override void Accelerate() { Console.WriteLine("In Car Accelerate() method"); Console.WriteLine(model + " accelerating"); } } public class Example7_10 { public static void Main() { // create a Car object Console.WriteLine("Creating a Car object"); Car myCar = new Car("Toyota", "MR2"); // call the Car object's Accelerate() method Console.WriteLine("Calling myCar.Accelerate()"); myCar.Accelerate(); } }
Readonly Property
using System; //VersionTest public class VersionReporter { public static string version { get { return "2.0.0.0"; } } public VersionReporter() { } } class VersionOutput { static void Main(string[] args) { string ver = VersionReporter.version; Console.WriteLine("Using version {0}", ver); } }
Demonstrate readonly
/*
C#: The Complete Reference
by Herbert Schildt
Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/
// Demonstrate readonly.
using System;
class MyClass {
public static readonly int SIZE = 10;
}
public class DemoReadOnly {
public static void Main() {
int[]nums = new int[MyClass.SIZE];
for(int i=0; i