In this lesson, we’re going to cover static vs instance class members. Simply put, a static method or property is one which belongs to – and is therefore accessible via – the class itself, without having to create an instance in order to access it. You may have noticed, in previous lessons, that there were some methods that were called without going through an instance in order to call it; there was no “new” keyword involved before we could access these methods:

cs-asp-045---static-vs-instance-members.001

Step 1: Using Intellisense to Identify Static Methods and Properties

All of these methods are static. The easiest way to distinguish static from instance methods is that they are accessible through the class name that they belong to. If you start typing a class name into Visual Studio, Intellisense will show you what static methods and properties are available to the type itself:

cs-asp-045---static-vs-instance-members.002

To demonstrate this difference between static and instance methods, fields and properties, create a simple class that contains both:

cs-asp-045---static-vs-instance-members.003

And now in another class, let’s create an instance to see what’s available to it via Intellisense. Note how the static field and static method are not available through the instance:

cs-asp-045---static-vs-instance-members.004

Also, note how the instance field and method are not available through referencing the class itself:

cs-asp-045---static-vs-instance-members.005

Tip:

As a beginner, it’s recommend that you not use the static keyword in your own classes unless they’re classes that only contain public helper methods and that they don’t contain any properties.

Step 2: Using Static Keyword for Helper Methods

A common use for the static keyword is for whenever there is a public helper method that performs some function that isn’t instance specific. Perhaps the method just processes some data and outputs it to the screen, for example. Here is a very contrived example:

cs-asp-045---static-vs-instance-members.008

Notice how the static method PerformCalculation() references the other static method handleSomePartOfTheCalculation(). This is perfectly fine, however, it would not be possible for the static method to reference an instance method even if they both belong to the same class:

cs-asp-045---static-vs-instance-members.009

The reason this is not allowed is because instance methods, in principle, have access to (1) instance fields, properties, and methods with its own class. If handleSomePartOfTheCalculation() were to (2) reference an instance property, then PerfomCalculation() would (3) also be referencing that instance property (although indirectly). However, since PerformCalculation() is statically accessible, handleSomePartOfTheCalculation() wouldn’t know what instance, if any, is being referenced:

cs-asp-045---static-vs-instance-members.010

The reason why this doesn’t work becomes obvious when we try to call the static method:

cs-asp-045---static-vs-instance-members.011

Step 3: An Instance Can Reference a Static, But not Vice Versa

We have no way of knowing what instance is being referenced by this static method, and neither does the compiler. That is why a static method can only access other static methods and properties. However, the inverse is possible, which is to say that an instance method can access a static property. Here, we’re creating a simple static property that can count each time a new instance of type Valuation is created:

cs-asp-045---static-vs-instance-members.012

cs-asp-045---static-vs-instance-members.013

Step 4: Making an Entire Class Static**

You can also mark an entire class as static, and the only time you would do that is if the class only holds static helper methods. Note that if you do mark a class as static, it is no longer able to hold any non-static fields, properties, or methods:

cs-asp-045---static-vs-instance-members.014

Step 5: Snapshot of the Static Math Class

One such class that exists in the .NET Framework is the Math class, which is a static class that only holds static methods (for performing common calculations), along with a few constants:

cs-asp-045---static-vs-instance-members.015

As you can see, the helper methods in the Math class are all static because all they do is return some sort of numerical value. An instance is not needed to do a basic calculation:

cs-asp-045---static-vs-instance-members.016

You can find more information about this class and its methods by visiting:

http://v.gd/static


Lessons in this Course