By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
435,356 Members | 2,752 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,356 IT Pros & Developers. It's quick & easy.

What is "Protected" doing?

P: n/a
This is an issue regarding what exactly is accomplished by using "Protected"
when defining a variable. It seems it does much more than just applying
Protected status to a variable.

I have an ascx control named HeadingBar. I have dragged it onto an aspx
page.

If I use the following statement.....

Dim HeadingBar1 as HeadingBar

This defines HeadingBar1 but, of course, does not instantiate it so
HeadingBar1 is nothing. (no suprise here)
If I use the following statement.....

Protected HeadingBar1 as HeadingBar

This not only defines HeadingBar1 but it also instantiates it as
ASP.HeadingBar_ascx. Here it seems that "Protected" is doing more than
giving a variable protected status - it's instantiating an instance!
Everything works fine when this is used.

If I use the following statement.....

Dim HeadingBar1 as HeadingBar = new HeadingBar

It instantiates HeadingBar1 as myProjectName.HeadingBar! Here it's an
object of my project. But when the statement HeadingBar1.Title = "This is
the heading" is executed the Title property in the ascx control throws an
exception on the Set statement of that property saying that lblTitle.text is
not instantiated.

It seems "Protected" is performing some functionality that I cannot find in
the docs. Can anyone explain this?

Thanks,
T


May 18 '06 #1
Share this Question
Share on Google+
4 Replies


P: n/a
I think you're confusing accessibility with instantiation. The variable is
accessible, or visible, to the asp page but is not instantiated. If you test
it, the variable is null because it isn't instantiated. when you're defining
the HeadingBar1, without the protected accessibility descriptor, it's
defined as private which means it's only visible within the class and not
within the asp page containing it.

Hope this helps,
Mark Fitzpatrick
Microsoft MVP - FrontPage

"Tina" <ti**********@nospammeexcite.com> wrote in message
news:%2****************@TK2MSFTNGP05.phx.gbl...
This is an issue regarding what exactly is accomplished by using
"Protected" when defining a variable. It seems it does much more than
just applying Protected status to a variable.

I have an ascx control named HeadingBar. I have dragged it onto an aspx
page.

If I use the following statement.....

Dim HeadingBar1 as HeadingBar

This defines HeadingBar1 but, of course, does not instantiate it so
HeadingBar1 is nothing. (no suprise here)
If I use the following statement.....

Protected HeadingBar1 as HeadingBar

This not only defines HeadingBar1 but it also instantiates it as
ASP.HeadingBar_ascx. Here it seems that "Protected" is doing more than
giving a variable protected status - it's instantiating an instance!
Everything works fine when this is used.

If I use the following statement.....

Dim HeadingBar1 as HeadingBar = new HeadingBar

It instantiates HeadingBar1 as myProjectName.HeadingBar! Here it's an
object of my project. But when the statement HeadingBar1.Title = "This is
the heading" is executed the Title property in the ascx control throws an
exception on the Set statement of that property saying that lblTitle.text
is not instantiated.

It seems "Protected" is performing some functionality that I cannot find
in the docs. Can anyone explain this?

Thanks,
T

May 18 '06 #2

P: n/a
I'm asuming you are using asp.net 1.1, if thats the case here is what I
understand. First of all, protected is an access modifier meaning that
only the class itself or any other class that inherits from it can
access that field, method, property, etc. In your case, when it
declares the control as Protected, it gives the ability for your .aspx
pages to declare controls and use it within the page. If you are
curious, if you look at the <%@ Control %> directive or <%@ Page %>
directive in your .aspx page you will see that it inherits from the
CodeBehind page. If you remove the protected keyword from the control
declaration, then when you run the page it will complain that it can't
find the control that you delared in your aspx page. So, when doing
CodeBehind, the Protected keywork is necessary. Does this give you some
idea of whats going on?

May 18 '06 #3

P: n/a
Tina:

The instance is created when you drop the ascx on the page. Everything else
is just a matter of whether you are referencing it or not...
Protected allows a child class access to the member. By doing Protected
HeadingBar as HeadingBar, it's allowing the child class (the aspx file) to
access it. Essentially, the aspx page is doing base.HeadingBar1 = new
HeadingBar() when you drop the control on there.

Protected doesn't do anything magical, it merely allows a child class to
access it. ASP.NET automatically associates member variables with control
ids. but in order to work, the aspx page (child) which inherits from the
codebehind (parent) has to have access to the property...so it must be
protected or public.
Dim HeadingBar1 as HeadingBar = new HEadingBar
creates a new instance of the class. What you need to do is to access the
existing instance is:

dim HeadingBar1 as HeadingBar = ctype(Page.FindControl("HeadingBar1"),
HeadingBar)

to create a new instance you need to do:

dim headingBar as HEadingBar = Page.LoadControl("~/headingbar.ascx");
someContainer.COntrols.Add(headingBar)

(for arguments sake, we can say that Page.LoadControl = new)
Either line is declaring a variable. In either case, dropping the control on
the aspx page is what creates the instance. Declaring it protected merely
lets ASP.NET assign the instance to the variable, as must be since the aspx
inherits from the codebehind..
Karl

--
http://www.openmymind.net/
http://www.fuelindustries.com/
"Tina" <ti**********@nospammeexcite.com> wrote in message
news:%2****************@TK2MSFTNGP05.phx.gbl...
This is an issue regarding what exactly is accomplished by using
"Protected" when defining a variable. It seems it does much more than
just applying Protected status to a variable.

I have an ascx control named HeadingBar. I have dragged it onto an aspx
page.

If I use the following statement.....

Dim HeadingBar1 as HeadingBar

This defines HeadingBar1 but, of course, does not instantiate it so
HeadingBar1 is nothing. (no suprise here)
If I use the following statement.....

Protected HeadingBar1 as HeadingBar

This not only defines HeadingBar1 but it also instantiates it as
ASP.HeadingBar_ascx. Here it seems that "Protected" is doing more than
giving a variable protected status - it's instantiating an instance!
Everything works fine when this is used.

If I use the following statement.....

Dim HeadingBar1 as HeadingBar = new HeadingBar

It instantiates HeadingBar1 as myProjectName.HeadingBar! Here it's an
object of my project. But when the statement HeadingBar1.Title = "This is
the heading" is executed the Title property in the ascx control throws an
exception on the Set statement of that property saying that lblTitle.text
is not instantiated.

It seems "Protected" is performing some functionality that I cannot find
in the docs. Can anyone explain this?

Thanks,
T

May 18 '06 #4

P: n/a
Got It. Thanks ( and thanks to Mark and tdavisjr too)
T

"Karl Seguin [MVP]" <karl REMOVE @ REMOVE openmymind REMOVEMETOO . ANDME
net> wrote in message news:eY**************@TK2MSFTNGP03.phx.gbl...
Tina:

The instance is created when you drop the ascx on the page. Everything
else is just a matter of whether you are referencing it or not...
Protected allows a child class access to the member. By doing Protected
HeadingBar as HeadingBar, it's allowing the child class (the aspx file) to
access it. Essentially, the aspx page is doing base.HeadingBar1 = new
HeadingBar() when you drop the control on there.

Protected doesn't do anything magical, it merely allows a child class to
access it. ASP.NET automatically associates member variables with control
ids. but in order to work, the aspx page (child) which inherits from the
codebehind (parent) has to have access to the property...so it must be
protected or public.
Dim HeadingBar1 as HeadingBar = new HEadingBar
creates a new instance of the class. What you need to do is to access the
existing instance is:

dim HeadingBar1 as HeadingBar = ctype(Page.FindControl("HeadingBar1"),
HeadingBar)

to create a new instance you need to do:

dim headingBar as HEadingBar = Page.LoadControl("~/headingbar.ascx");
someContainer.COntrols.Add(headingBar)

(for arguments sake, we can say that Page.LoadControl = new)
Either line is declaring a variable. In either case, dropping the control
on the aspx page is what creates the instance. Declaring it protected
merely lets ASP.NET assign the instance to the variable, as must be since
the aspx inherits from the codebehind..
Karl

--
http://www.openmymind.net/
http://www.fuelindustries.com/
"Tina" <ti**********@nospammeexcite.com> wrote in message
news:%2****************@TK2MSFTNGP05.phx.gbl...
This is an issue regarding what exactly is accomplished by using
"Protected" when defining a variable. It seems it does much more than
just applying Protected status to a variable.

I have an ascx control named HeadingBar. I have dragged it onto an aspx
page.

If I use the following statement.....

Dim HeadingBar1 as HeadingBar

This defines HeadingBar1 but, of course, does not instantiate it so
HeadingBar1 is nothing. (no suprise here)
If I use the following statement.....

Protected HeadingBar1 as HeadingBar

This not only defines HeadingBar1 but it also instantiates it as
ASP.HeadingBar_ascx. Here it seems that "Protected" is doing more than
giving a variable protected status - it's instantiating an instance!
Everything works fine when this is used.

If I use the following statement.....

Dim HeadingBar1 as HeadingBar = new HeadingBar

It instantiates HeadingBar1 as myProjectName.HeadingBar! Here it's an
object of my project. But when the statement HeadingBar1.Title = "This
is the heading" is executed the Title property in the ascx control throws
an exception on the Set statement of that property saying that
lblTitle.text is not instantiated.

It seems "Protected" is performing some functionality that I cannot find
in the docs. Can anyone explain this?

Thanks,
T


May 18 '06 #5

This discussion thread is closed

Replies have been disabled for this discussion.