Re: Namespaces - broad question
From: Kevin Spencer (uce_at_ftc.gov)
Date: 04/08/04
- Next message: Mike Kruchten: "Re: Any good crystal reports alternatives"
- Previous message: Steven K: "controls sharing one OleDbDataReader"
- In reply to: Random: "Re: Namespaces - broad question"
- Messages sorted by: [ date ] [ thread ]
Date: Thu, 8 Apr 2004 17:21:00 -0400
You simply create a Class Library with the function(s) you want in it.
Reference the Class Library in your Page, and use it.
-- 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:#kdV3paHEHA.3240@TK2MSFTNGP12.phx.gbl... > 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 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
- Next message: Mike Kruchten: "Re: Any good crystal reports alternatives"
- Previous message: Steven K: "controls sharing one OleDbDataReader"
- In reply to: Random: "Re: Namespaces - broad question"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|