Re: Namespaces - broad question

From: Random (cipherlad_at_hotmail.com)
Date: 04/08/04


Date: Thu, 8 Apr 2004 13:45:41 -0700

hoo, boy. What a thread this is turning out to be. First, I do understand,
and you have confirmed a lot of things I have suspected.

Let me take a different approach on this, if I may. Let's say I have two
aspx pages that I know I want utilize a specific function within, that is
contained in a class. Without having to copy/paste this function into a
different class in a different codebehind page (because I don't want them to
have the same codebehind page), how can I reference this function.

NONE of the tutorials or materials I have read go beyond a one page example.
Seperation of code and HTML... fine. It's the sharing of code through
namespaces and classes that I'm having difficulty grasping at this point.

"Kevin Spencer" <uce@ftc.gov> wrote in message
news:%23ZasEUaHEHA.308@tk2msftngp13.phx.gbl...
> Hi Random,
>
> > I realize that while Visual Studio automatically encourages a 1 to 1
> > relationship between aspx and codebehind pages, this does not
necessarily
> > need to be the case. I also realize that errors would occur during
> > compiling if the same class was written in different places. What I
don't
> > understand is how Visual Studio keeps track in the assembly of where all
> > these written classes are?
>
> A .Net assembly is a compiled DLL. The data in the code files is compiled
> into binary code in the DLL, including all the namespace information,
> references, etc. Once compiled into a DLL, your CodeBehind class files are
> nothing but dead weight. They are not used; the DLL is. So, forget about
the
> "written classes". Think about the classes themselves, rather than the
code
> you write to create them.
>
> > As another example, what if I wrote an aspx page that inherited a class
> > contained in a codebehind page that was NOT referenced by the aspx page?
>
> You wouldn't be able to compile OR use it. An aspx Page is a composite of
2
> distinct entities: the Page Template (.aspx) and the CodeBehind class. The
> Page Template inherits the CodeBehind class, which inherits
> System.Web.UI.Page. The .aspx file by itself can do nothing without
> CodeBehind, whether that is in the same (.aspx) file as the Page Template,
a
> CodeBehind file, or a DLL. The important thing is that the .aspx Page
> Template has a reference in it telling it where to look for the class
> definition that it inherits. If the CodeBehind is compiled into a DLL, and
> that DLL is in one of the locations that ASP.Net can find it (Global
> Assembly Cache or \bin folder), ASP.Net uses Reflection to query the
> assembly for the class, based upon the NameSpace and Class name of the
> class. All of this information is contained in the DLL itself.
>
> > Since the class is found in the assembly, how would the aspx page know
> where
> > to look? When the code is all compiled, does it automatically all the
> > classes available from a central source? And if this is the case,
> wouldn't
> > it make more sense to put all the code into a *.vb or *.cs file where it
> can
> > be centrally referenced?
>
> Again, only the CodeBehind is compiled. The Page Template (.aspx) must
have
> a Reference in it telling it where to find the CodeBehind class. There IS
> not "central source" for information about .Net classes. That is why you
can
> simply put your DLLs into the \bin folder of your web app, and they will
be
> found. Once found, the .Net platform can query the DLLs to find the DLL
> needed, and the class inside the DLL to use.
>
> Take a look at the following example, from an ASPX page I created:
>
> <%@ Page Language="vb" AutoEventWireup="false"
> Codebehind="WebForm1.aspx.vb" Inherits="ControlTest.WebForm1"%>
>
> The "CodeBehind" attribute is there solely for the benefit of Visual
> Studio.Net. It tells VS.Net what file to compile to create the DLL used by
> the Page class(es). The "Inherits" directive is the key. Note that it
> contains no information about the location of the DLL. ASP.Net KNOWS where
> the DLL can be located. Instead, it contains a reference to a NameSpace
and
> a class, which it can find by using Reflection on the assemblies in the
\bin
> folder and the GAC.
>
> --
> HTH,
> Kevin Spencer
> .Net Developer
> Microsoft MVP
> Big things are made up
> of lots of little things.
>
> "Random" <cipherlad@hotmail.com> wrote in message
> news:#DVrHZZHEHA.2624@TK2MSFTNGP10.phx.gbl...
> > I know you are not trying to offend, Marina, but I am an experienced
> > programmer, just new to .NET, and I have read a lot, from the basics. I
> am
> > disappointed that a lot of the 'beginner' material has been unhelpful
when
> > it comes to an architectural overview of ASP.NET, which is what I am
> trying
> > to clarify here. I thought that by asking 'basic' questions, I might
get
> a
> > better understanding of how things fit into the whole. So please be
> patient
> > with me in this.
> >
> > I realize that while Visual Studio automatically encourages a 1 to 1
> > relationship between aspx and codebehind pages, this does not
necessarily
> > need to be the case. I also realize that errors would occur during
> > compiling if the same class was written in different places. What I
don't
> > understand is how Visual Studio keeps track in the assembly of where all
> > these written classes are?
> >
> > As another example, what if I wrote an aspx page that inherited a class
> > contained in a codebehind page that was NOT referenced by the aspx page?
> > Since the class is found in the assembly, how would the aspx page know
> where
> > to look? When the code is all compiled, does it automatically all the
> > classes available from a central source? And if this is the case,
> wouldn't
> > it make more sense to put all the code into a *.vb or *.cs file where it
> can
> > be centrally referenced?
> >
> > You are right, I think there is something very simple I am
> misunderstanding,
> > but for the life of me, I can't locate the answer anwhere.
> >
> > Random
> >
> > "Marina" <someone@nospam.com> wrote in message
> > news:e7UIi%23YHEHA.4032@TK2MSFTNGP12.phx.gbl...
> > > I have no idea what you are talking about to be honest.
> > >
> > > The class is already in a namespace - the Inherits attribute is just
> > > referencing. It isn't creating a new namespace or a new class. So I
> have
> > no
> > > idea what you are talking about when you ask about namespaces being
> > written
> > > in central locations.
> > >
> > > You can have any number of pages inherit from the same class - as long
> as
> > > that class actually exists. In the visual studio model, you would have
> to
> > > manually do that, because it assume a 1 to 1 ration between pages and
> code
> > > behind classes.
> > >
> > > If you tried to compiled two classes with the same name into the same
> > > assembly, the compiler would not allow you to do this. The assembly
> > itself
> > > knows what classes it has, and what namespace each one is in, in it's
> > > manifest.
> > >
> > > I would recommend you start at the very basics of ASP.NET, it sounds
> like
> > > you are missing some basic concept about how this all works. In your
> > first
> > > post you asked about the difference between a namespace and a class -
so
> > it
> > > seems like you need to go to the beginning of .NET, and not just into
> the
> > > middle of ASP.NET.
> > >
> > > "Random" <cipherlad@hotmail.com> wrote in message
> > > news:uau2myYHEHA.3032@TK2MSFTNGP09.phx.gbl...
> > > > Okay, that clarifies the "Inherits" vs. "Imports" question very
well.
> > > > Thanks.
> > > >
> > > > As far as the namespace being available in the assembly, though, let
> me
> > > give
> > > > you an example...
> > > >
> > > > Using the portal code I gave before, would I be able to write
another
> > aspx
> > > > page, use the same "Inherits=<fully qualified class name>" phrasing,
> > > without
> > > > that class being written into the different codebehind page
referenced
> > in
> > > > the new aspx page?
> > > >
> > > > If yes, why? Shouldn't namespaces be written in a more centrally
> > > referenced
> > > > file?
> > > >
> > > > If no, then how can the assembly keep track of all the declared
> > > namespaces?
> > > > And what would it do if two or more codebehind references had the
same
> > > > namespace and class written in them?
> > > >
> > > > Random
> > > >
> > > > "Marina" <someone@nospam.com> wrote in message
> > > > news:eqT6TmYHEHA.2668@TK2MSFTNGP10.phx.gbl...
> > > > > This inherits attribute, refers to the name of the class this page
> > > > inherits
> > > > > from. The class's name is CDefault, but it is located in the
> > > > > ASPNET.StarterKit.Portal namespace, and so the namespace has to
> > preceed
> > > > it.
> > > > >
> > > > > At runtime, asp.net looks for a class with the name in the
inherits
> > > > > attribute.
> > > > >
> > > > > This has nothing to do with projects, or namespaces being
available.
> > It
> > > is
> > > > > just the fully qualified name of the class.
> > > > >
> > > > > "Random" <cipherlad@hotmail.com> wrote in message
> > > > > news:OI$efeYHEHA.548@TK2MSFTNGP09.phx.gbl...
> > > > > > Hmm. I'm trying to teach myself from examples and tutorials and
> > > books.
> > > > > > Specifically in this case, I'm trying to learn from the MS
> > > > > PortalStarterKit.
> > > > > > Specifically, the default page in that example has as the first
> line
> > > in
> > > > > > default.aspx:
> > > > > >
> > > > > > <%@ Page CodeBehind="Default.aspx.vb" language="vb"
> > > > > AutoEventWireup="false"
> > > > > > Inherits="ASPNET.StarterKit.Portal.CDefault" %>
> > > > > >
> > > > > > The codebehind page has:
> > > > > >
> > > > > > Namespace ASPNET.StarterKit.Portal
> > > > > > Public Class CDefault
> > > > > > Inherits System.Web.UI.Page
> > > > > > Private Sub Page_Load(ByVal sender As System.Object,
ByVal
> e
> > > As
> > > > > > System.EventArgs) Handles MyBase.Load
> > > > > > <code here>
> > > > > > End Sub
> > > > > > End Class
> > > > > > End Namespace
> > > > > >
> > > > > > I'm trying to find out how and why this works the way that it
> does.
> > > > It's
> > > > > > more complex than the examples given by tutorials and books.
> > > > > >
> > > > > > And again, I'm trying to figure out how the namespace declared
> here
> > > > makes
> > > > > > it's way into the assembly. And because it does, somehow, does
> that
> > > > make
> > > > > it
> > > > > > available through the entire project?
> > > > > >
> > > > > > Random
> > > > > >
> > > > > > "Marina" <someone@nospam.com> wrote in message
> > > > > > news:%23WIkSAYHEHA.2260@TK2MSFTNGP09.phx.gbl...
> > > > > > > First of all, namespaces can be used with the 'Imports'
keyword,
> > so
> > > as
> > > > > not
> > > > > > > have to write out the full namespace for every class, not the
> > > > 'Inherits'
> > > > > > > attribute.
> > > > > > >
> > > > > > > Think of namespaces as folders in your file system, and
classes
> as
> > > the
> > > > > > files
> > > > > > > in them. So a namespace itself isn't anything but an
> > organizational
> > > > > > > container for classes - just as a folder is just a container
for
> > > > files.
> > > > > > > Classes are the actual things that you instantiate, and call
> > methods
> > > > on.
> > > > > > >
> > > > > > > I didn't really understand your questions. I think they all
stem
> > > from
> > > > > not
> > > > > > > understanding what a namespace actually is.
> > > > > > >
> > > > > > > "Random" <cipherlad@hotmail.com> wrote in message
> > > > > > > news:uD4r44XHEHA.2668@TK2MSFTNGP10.phx.gbl...
> > > > > > > > I'm confused about the proper use and usefulness of
> namespaces.
> > I
> > > > > > beleive
> > > > > > > I
> > > > > > > > understand the purpose is so the developer can put classes
> > within
> > > > > > > namespaces
> > > > > > > > to essentially organize your code. And I understand that
you
> > > > declare
> > > > > > your
> > > > > > > > intention to use a namespace within a page through the
> > "Inherits"
> > > > > > > attribute.
> > > > > > > > I know that using "Inherits" isn't absolutely necessary,
it's
> > just
> > > > > > > > recommended so the developer doesn't have to type out the
> entire
> > > > > > namespace
> > > > > > > > in code. I know that namespaces have to appear in the
project
> > > > > assembly,
> > > > > > > > however...
> > > > > > > >
> > > > > > > > How does the assembly find a namespace that the developer
has
> > > > > > written????
> > > > > > > > In all the examples I've seen, namespaces have been written
in
> > > > > > codebehind
> > > > > > > > pages. How does this make them accessible to the entire
> > project?
> > > > > > What's
> > > > > > > to
> > > > > > > > prevent a duplicate namespace from being written in a
> different
> > > > > > codebehind
> > > > > > > > page? Is there a better place to write all the project
> > namespaces
> > > > for
> > > > > > > more
> > > > > > > > centralized accessibility?
> > > > > > > >
> > > > > > > > And finally, how do namespaces DIFFER from classes?
> > > > > > > >
> > > > > > > > Random
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>



Relevant Pages

  • Re: What is Needed to Get an ASP.NET Page to Work?
    ... MyProject.dll, basically everything in the bin folder after compiling, ... Besides the entire bin folder, and any aspx pages, it should work fine. ... Also, everytime you compile an asp.net 2.0 website, a number of dll ...
    (microsoft.public.dotnet.framework.aspnet)
  • Re: Namespaces - broad question
    ... > compiling if the same class was written in different places. ... A .Net assembly is a compiled DLL. ... your CodeBehind class files are ... > contained in a codebehind page that was NOT referenced by the aspx page? ...
    (microsoft.public.dotnet.framework.aspnet)
  • Re: Namespaces - broad question
    ... Reference the Class Library in your Page, ... > aspx pages that I know I want utilize a specific function within, ... > have the same codebehind page), how can I reference this function. ... >> A .Net assembly is a compiled DLL. ...
    (microsoft.public.dotnet.framework.aspnet)
  • Re: What is Needed to Get an ASP.NET Page to Work?
    ... MyProject.dll, basically everything in the bin folder after compiling, ... Besides the entire bin folder, and any aspx pages, it should work fine. ... Also, everytime you compile an asp.net 2.0 website, a number of dll ...
    (microsoft.public.dotnet.framework.aspnet)
  • Re: copy paste deployment
    ... if you use the vs model, all the codebehind are compiled into a dll, ... which you deploy on the website. ... > THe problem is when I copy the aspx & aspx.cs file to the web server I ...
    (microsoft.public.dotnet.framework.aspnet)

Quantcast