when to use Staic ,Private Constructor

Posted by Jameschowdare under C# on 4/6/2009 | Views : 27528 | Status : [Member] | Replies : 3
Please Explain me,

How and when to use static , private Constructor, And Purpose Of the Both .




Responses

Posted by: Vuyiswamb on: 4/6/2009 [Member] [MVP] [Administrator] NotApplicable

Up
0
Down
A static Variable is a Variable that is declared Static and initialized, the Value cannot be changed it stays like that no matter what.You can use Static Variables in Calculations where you need constants.

A private constructor is a special instance constructor. It is commonly used in classes that contain static members only. If a class has one or more private constructors and no public constructors, then other classes (except nested classes) are not allowed to create instances of this class. For example:



Thank you for Posting at DotnetFunda

Were looking forward for your reply


Vuyiswa Maseko


Thank you for posting at Dotnetfunda
[Administrator]

Jameschowdare, if this helps please login to Mark As Answer. | Alert Moderator

Posted by: Jameschowdare on: 4/6/2009 [Member] Starter

Up
0
Down
Hi Vuyiswa Maseko,
I need about the static constructor purspose,
pls explaint both static private construtor purpose ,
this will let know the all users
ThankAndRegards
JamesChwodarey

Jameschowdare, if this helps please login to Mark As Answer. | Alert Moderator

Posted by: Vuyiswamb on: 4/6/2009 [Member] [MVP] [Administrator] NotApplicable

Up
0
Down
Good Morning Jameschowdare

C# supports two types of constructor, a class constructor (static constructor) and an instance constructor (non-static constructor).

Static constructor is used to initialize static data members as soon as the class is referenced first time, whereas an instance constructor is used to create an instance of that class with <new> keyword. A static constructor does not take access modifiers or have parameters and can't access any non-static data member of a class.

Since static constructor is a class constructor, they are guaranteed to be called as soon as we refer to that class or by creating an instance of that class.

You may say, why not initialize static data members where we declare them in the code. Like this :

private static int id = 10;

private static string name = "jack";


Static data members can certainly be initialized at the time of their declaration but there are times when value of one static member may depend upon the value of another static member. In such cases we definitely need some mechanism to handle conditional initialization of static members. To handlesuch situation, C# provides static constructor.

Let me explain you with examples :

In the above example, static data member <id> is declared and initialized in same line. So if you compile and run this program your output would look similar to this :

Test.id = 5

Lets create one more class similar to class Test but this time the value of its static data member would depend on the value of static data member <id> of class Test.id.

//File Name : Test1.cs
using System;
namespace Constructor
{
class Test1
{
private static int id ;
//Static constructor, value of data member id is set conditionally here.
//This type of initialization is not possible at the time of declaration.
static Test1()
{
if( Test.Id < 10 )
{
id = 20;
}
else
{
id = 100;
}
Console.WriteLine("Static<Class> Constructor for Class Test1 Called..");
}
public static void print()
{
Console.WriteLine("Test1.id = " + id);
}
static void Main(string[] args)
{
//Print the value of id
Test1.print();
}
}
}



As you can see in the above static constructor, static data member <id> is initialized conditionally. This type of initialization is not possible at the time of declaration. This is where static constructor comes in picture. So if you compile and run this program your output would look similar to this :

Static<Class> Constructor for Class Test1 Called..
id = 20

Since <id> in class Test was initialized with a value of 5, therefore <id> in class Test1 got initialized to a value of 20.


Thank you for Posting in Dotnetfunda


Were looking Forward for your reply

Vuyiswa Maseko


Thank you for posting at Dotnetfunda
[Administrator]

Jameschowdare, if this helps please login to Mark As Answer. | Alert Moderator

Login to post response