global class (simple question!)

M

ma

Hello,
I want to create a global class. To do this I did the followings:

1- Create a class name test. It has a public variable named mystring.
public class test

{

public string mystring = "hello world";

}

2- Create a global.asax and its coresponding global.asax.cs ( i did it using
VC2005)
3 - in global class generated by VC2005, I introduced test class as follow:

public class Global : System.Web.HttpApplication

{

public test myclass;

protected void Application_Start(object sender, EventArgs e)

{

}

protected void Application_End(object sender, EventArgs e)

{

}

}



now I want to use it in an event in a mater page.



I did this:

public partial class Site1 : System.Web.UI.MasterPage

{

protected void Page_Load(object sender, EventArgs e)

{

Response.Write(Application.myclass.mystring);

}

}

but I am getting this error:

Error 1 'System.Web.HttpApplicationState' does not contain a definition for
'myclass'

I do this:

public partial class Site1 : System.Web.UI.MasterPage

{

protected void Page_Load(object sender, EventArgs e)

{

Response.Write(Global.myclass.mystring);

}

}

Error 1 An object reference is required for the nonstatic field, method, or
property 'Global.myclass'



What is wrong wioth my code?



Regards
 
J

John Mott

You need to declare the string as

public static string mystring = "Hello World";

I would recommend making it a property

public static mystring {
get { return "Hello World"; }
}

john
nice clean examples at www.nicecleanexamples.com
 
M

ma

Thanks, but I don 't want that my variable be static. It is an example but
in realworld I want a variable which is not static. What should I do?

Regards
 
J

John Mott

If you're trying to create global variables you sorta do want them static.
You can have something thats modifiable, not just a constant.

static string _mystring = "";

public static string mystring {
get { return _mystring; }
set { _mystring = value;}
}

The other option is to create an instance of the global class

public class Global {
public string mystring = "a default value";
};

public Global GlobalInstance = new Global();

and then you can say

GlobalInstance.mystring = "a new value";


John
nice clean examples at www.nicecleanexamples.com
 
M

ma

Thanks John, But it doesn't work!

I did this in the page load event:

protected void Page_Load(object sender, EventArgs e)

{

Global GlobalInstance=new Global();

Response.Write(GlobalInstance.myclass.mystring);

GlobalInstance.myclass.mystring = "new string";

}



so the first time that I load this page, it should show "Hello World" and
the next time that I download the page ( or refresh it) it should show "new
string" but it always show "hello world"

Any suggestion?

Regards
 
J

John Mott

ma said:
Thanks John, But it doesn't work!

I did this in the page load event:

protected void Page_Load(object sender, EventArgs e)

{

Global GlobalInstance=new Global();

Response.Write(GlobalInstance.myclass.mystring);

GlobalInstance.myclass.mystring = "new string";

}



so the first time that I load this page, it should show "Hello World" and
the next time that I download the page ( or refresh it) it should show
"new string" but it always show "hello world"

Any suggestion?

Regards

Make the Global class itself static, like this

public static class Global {
public static string myString = "default";
}

Then you should be able to just refer to it without creating it with

Global.myString = "set me";

john

nice clean examples at www.nicecleanexamples.com
 
J

John Mott

You can create a static member of the Application class (a static member can
be an object that can be modified, it doesn't have to be read-only). That
was my first idea but you didn't want a static variable. You may have
thought from that context that static meant 'readonly', it doesn't.

Does that help?

here's a link as well:

http://support.microsoft.com/default.aspx?scid=kb;en-us;Q312607

john
 
G

Guest

Hi there,

Usually, when the class cannot be static and you require one global instance
of a class, singleton pattern should be used (this is thread safe variant):


public class Global
{
private Global()
{
}

private static object sync = new object();
private static Global instance = null;

public Global Instance
{
get
{
lock(sync)
{
if (instance == null)
{
instance = new Global();
}
}
return instance;
}
}
}

// usage
Global global = Global.Instance;

In addition, in ASP.NET there's build-in mechanism for such scenarios called
Application state (instance can be initialized in the Global.asax
Application_Start event) or Caching (you'd have to make sure race condition
is eliminated).

HTH
 
M

ma

Thanks,
Where can I read more about application instance or caching? Any good
tutorial on the web?

Regards
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,817
Latest member
DicWeils

Latest Threads

Top