public class Book { public string title; public string author; public short yearPublished; public int numberOfPages; public char coverType; } public class Exercise { static int Main() { var written = new Book(); var bought = new Book(); return 0; } } Each one of these instances gives you access to the members of the class but each instance holds the particular values of the members of its instance. Consider the results of the following program: using System; public class Book { public string title; public string author; public short yearPublished; public int numberOfPages; public char coverType; } public class Exercise { static int Main() { var first = new Book(); first.title = "Psychology and Human Evolution"; first.author = "Jeannot Lamm"; first.yearPublished = 1996; first.numberOfPages = 872; first.coverType = 'H'; Console.WriteLine("Book Characteristics"); Console.Write("Title: "); Console.WriteLine(first.title); Console.Write("Author: "); Console.WriteLine(first.author); Console.Write("Year: "); Console.WriteLine(first.yearPublished); Console.Write("Pages: "); Console.WriteLine(first.numberOfPages); Console.Write("Cover: "); Console.WriteLine(first.coverType); var second = new Book(); second.title = "C# First Step"; second.author = "Alexandra Nyango"; second.yearPublished = 2004; second.numberOfPages = 604; second.coverType = 'P'; Console.WriteLine("Book Characteristics"); Console.Write("Title: "); Console.WriteLine(second.title); Console.Write("Author: "); Console.WriteLine(second.author); Console.Write("Year: "); Console.WriteLine(second.yearPublished); Console.Write("Pages: "); Console.WriteLine(second.numberOfPages); Console.Write("Cover: "); Console.WriteLine(second.coverType); return 0; } } This would produce: Book Characteristics Title: Psychology and Human Evolution Author: Jeannot Lamm Year: 1996 Pages: 872 Cover: H Book Characteristics Title: C# First Step Author: Alexandra Nyango Year: 2004 Pages: 604 Cover: P All of the member variables and methods of classes we have used so far are referred to as instance members because, in order to access them, you must have an instance of a class declared in another class in which you want to access them. In your application, you can declare a variable and refer to it regardless of which instance of an object you are using. Such a variable is called static.
To declare a member variable of a class as static, type the static keyword on its left. Here is an example: public class Book { static string title; } In the same way, you can declare as many static variables as you want. As we saw in previous lessons, you can control access to a field using a modifier. If you apply the modifier, the static keyword can be written before or after it, as long as it appears before the data type. Here are examples: public class Book { public static string title; static public string author; } To access a static variable, you must "qualify" where you want to use it. Qualifying a member means you must specify its class. Here is an example: using System; public class Book { public static string title; static public string author; public short yearPublished; public int pages; public char coverType; } public class Exercise { static int Main() { var first = new Book(); Book.title = "Psychology and Human Evolution"; Book.author = "Jeannot Lamm"; first.yearPublished = 1996; first.pages = 872; first.coverType = 'H'; Console.WriteLine("Book Characteristics"); Console.Write("Title: "); Console.WriteLine(Book.title); Console.Write("Author: "); Console.WriteLine(Book.author); Console.Write("Year: "); Console.WriteLine(first.yearPublished); Console.Write("Pages: "); Console.WriteLine(first.Pages); Console.Write("Cover: "); Console.WriteLine(first.coverType); var second = new Book(); Book.title = "C# First Step"; Book.author = "Alexandra Nyango"; second.yearPublished = 2004; second.pages = 604; second.coverType = 'P'; Console.WriteLine("Book Characteristics"); Console.Write("Title: "); Console.WriteLine(Book.title); Console.Write("Author: "); Console.WriteLine(Book.author); Console.Write("Year: "); Console.WriteLine(second.yearPublished); Console.Write("Pages: "); Console.WriteLine(second.Pages); Console.Write("Cover: "); Console.WriteLine(second.coverType); return 0; } } Notice that when a variable has been declared as static, you don't need an instance of the class to access that member variable outside of the class. Based on this, if you declare all members of a class as static, you don't need to declare a variable of their class in order to access them. In the following example, the Title and Author fields of the Book class are accessed from the Exercise class without using an instance of the Book class: using System; public class Book { public static string title; static public string author; } public class Exercise { static void Main() { Book.title = "Psychology and Human Evolution"; Book.author = "Jeannot Lamm"; Console.WriteLine("Book Characteristics"); Console.WriteLine("Title: "); Console.WriteLine(Book.title); Console.WriteLine("Author: "); Console.WriteLine(Book.author); Book.title = "C# First Step"; Book.author = "Alexandra Miles"; Console.WriteLine("Book Characteristics"); Console.WriteLine("Title: "); Console.WriteLine(Book.title); Console.WriteLine("Author: "); Console.WriteLine(Book.author); Console.ReadKey(); } } In the same way, you can declare a combination of static and non-static variables as you see fit. You just have to remember that, to access a static variable, you don't create an instance of the class. To access a non-static variable, you must declare a variable for the class.
|
|||||||||||||||||||||