static and non-static fields in C#
Introduction
MSDN
Definition: A static class is basically the same as a non-static
class, but there is one difference: a static class cannot be instantiated. In
other word, we cannot use the new keyword to create a variable of the class
type. Because there is no instance variable, we access the members of a static
class by using the class name itself.
C# fields must be declared inside a
class. However, if we declare a method or a field as static, we can call the
method or access the field by using the name of the class. No instance is
required. We can also use the static keyword when defining a field. With this
feature, we can create a single field that is shared among all objects created
from a single class. Non static fields are local to each instance of an object.
When you define a static method or
field, it does not have access to any instance fields defined for the class; it
can use only fields that are marked as static. Furthermore, it can directly
invoke only other methods in the class that are marked as static; non static
(instance) methods or field require first to create an object on which to call
them.
Look at the example given
below:
using System;
using System.Collections.Generic;
using System.Text;
namespace TestiClass
{
class Program
{
int val = 20;
static void Main(string[] args)
{
Program x = new Program();
int newval = x.val;
Console.WriteLine(newval);
Console.ReadKey();
}
}
}
In above example, we have a non-static
field named val. From the main method (static method), I'm trying to access
that field and to do this I need to create the instance of the class inside
main method (static method) because static method only access the static fields
and val is not static here. So, to access this I have created an instance
(named x) of Program class that has val field and then assigning the val to
newval field inside static main method. This is really cumbersome task. To fix
such cumbersome, C# uses static fields. Let's take a look at use of static
here.
Look at the example given
below:
using System;
using System.Collections.Generic;
using System.Text;
namespace TestiClass
{
class Program
{
static int val = 20;
static void Main(string[] args)
{
Console.WriteLine(val);
Console.ReadKey();
}
}
}
Comments
Post a Comment