What is "Protected" doing?

Discussion in 'ASP .Net' started by Tina, May 18, 2006.

  1. Tina

    Tina Guest

    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
    Tina, May 18, 2006
    #1
    1. Advertising

  2. 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" <> wrote in message
    news:%...
    > 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
    >
    >
    >
    >
    Mark Fitzpatrick, May 18, 2006
    #2
    1. Advertising

  3. Tina

    tdavisjr Guest

    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?
    tdavisjr, May 18, 2006
    #3
  4. 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" <> wrote in message
    news:%...
    > 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
    >
    >
    >
    >
    Karl Seguin [MVP], May 18, 2006
    #4
  5. Tina

    Tina Guest

    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:...
    > 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" <> wrote in message
    > news:%...
    >> 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
    >>
    >>
    >>
    >>

    >
    >
    Tina, May 18, 2006
    #5
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Andreas Klemt
    Replies:
    2
    Views:
    536
    Andreas Klemt
    Jul 5, 2003
  2. clintonG

    Re: What means Protected WithEvents ?

    clintonG, Jul 5, 2003, in forum: ASP .Net
    Replies:
    0
    Views:
    421
    clintonG
    Jul 5, 2003
  3. Jon
    Replies:
    4
    Views:
    5,626
    Jonathan Williams
    Aug 7, 2003
  4. Philippe Meunier
    Replies:
    1
    Views:
    285
    Mike Moore [MSFT]
    Oct 24, 2003
  5. Stephen Miller
    Replies:
    5
    Views:
    9,074
    kaverao
    Sep 17, 2009
Loading...

Share This Page