|
web
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Difference between Class and modulevb.net
Hey there, could someone just tell me what the differnce is between classes and modules and when each one would be used compared to the other? Any help would be great Thanx in advance Bonzol,
One of the thousand times asked question in this newsgroup. A module is a simple format of a Class with only Shared members. There is never a reason to use a module execpt if you have that already in your VB6 converted program. If you want to know more try a search on that in Google Newsgroups. http://groups.google.com/group/microsoft.public.dotnet.languages.vb/search?group=microsoft.public.dotnet.languages.vb&q=class+module&qt_g=1&searchnow=Search+this+group However feel free to ask this kind of questions again. You could not have knowed that it is so often asked. I hope that this gives an idea Cor Show quoteHide quote "Bonzol" <Bon***@hotmail.com> schreef in bericht news:1151206097.131151.273950@p79g2000cwp.googlegroups.com... > vb.net > > Hey there, could someone just tell me what the differnce is between > classes and modules and when each one would be used compared to the > other? > > Any help would be great > > Thanx in advance > Hmmm ,,, :-|
> There is never a reason to use a module execpt if you have that already in That is just your opinion Cor> your VB6 converted program. To answer your question Bonzol What is a module in VB.Net ? A Module in VB.Net = a Class where Shared is implicitly understood for each member. And the module name doesn't need to be supplied when the members are used. A Module compiles down to a NotInheritable class, with an attribute called StandardModuleAttribute attached. As far as the compiled code goes, there's no difference. However here is also the catch why people in the full OOP camp say you shouldn`t use modules a NotInheritable(sealed) class which only consists of Shared (static) methods is not very good object-oriented design. :-) In my opinion there are two situations in wich using a Module might be valid 1. You do not care about OOP rules and just want to write as fast as possible and as easy as possible a program in a situation were it is in your opinion valid to use a module ( it's a style thingy ) i personally wrap everything in a class when it can be represented as an object ( a module can save you a lot of typing ) 2. when you want to override the standard method call behavior of VB.net like a better IIF Public Function IIf(Of T)(ByVal expression As Boolean, _ ByVal truePart As T, ByVal falsePart As T) As T If expression Then Return truePart Else Return falsePart End If End Function This in a module will make anny call to iif in your code be redirected to this "better" iif method so instead of having to change all your code you can take advantage of language enhancements in the future by just writing better methods as the language features ( in previous versions we did not have generics , so in this situation it is a nice feature to have ) regards Michel Posseth [MCP] Show quoteHide quote "Cor Ligthert [MVP]" <notmyfirstn***@planet.nl> schreef in bericht news:OJ2o7aBmGHA.4064@TK2MSFTNGP02.phx.gbl... > Bonzol, > > One of the thousand times asked question in this newsgroup. > > A module is a simple format of a Class with only Shared members. > > There is never a reason to use a module execpt if you have that already in > your VB6 converted program. > > If you want to know more try a search on that in Google Newsgroups. > > http://groups.google.com/group/microsoft.public.dotnet.languages.vb/search?group=microsoft.public.dotnet.languages.vb&q=class+module&qt_g=1&searchnow=Search+this+group > > However feel free to ask this kind of questions again. You could not have > knowed that it is so often asked. > > I hope that this gives an idea > > Cor > > "Bonzol" <Bon***@hotmail.com> schreef in bericht > news:1151206097.131151.273950@p79g2000cwp.googlegroups.com... >> vb.net >> >> Hey there, could someone just tell me what the differnce is between >> classes and modules and when each one would be used compared to the >> other? >> >> Any help would be great >> >> Thanx in advance >> > > Michel,
You have exactly written why I have that opinion, I could not have described it better. :-) CorShow quoteHide quote "Michel Posseth [MCP]" <M***@posseth.com> schreef in bericht news:elTm6LHmGHA.3632@TK2MSFTNGP03.phx.gbl... > Hmmm ,,, :-| > >> There is never a reason to use a module execpt if you have that already >> in your VB6 converted program. > > That is just your opinion Cor > > To answer your question Bonzol > > What is a module in VB.Net ? > > A Module in VB.Net = a Class where Shared is implicitly understood > for each member. And the module name doesn't need to be supplied when the > members are used. > > A Module compiles down to a NotInheritable class, with an attribute > called StandardModuleAttribute attached. As far as the compiled code goes, > there's no difference. > > However here is also the catch why people in the full OOP camp say you > shouldn`t use modules > a NotInheritable(sealed) class which only consists of Shared (static) > methods is not very good object-oriented design. :-) > > In my opinion there are two situations in wich using a Module might be > valid > > 1. You do not care about OOP rules and just want to write as fast as > possible and as easy as possible a program in a situation were it is in > your opinion valid to use a module ( it's a style thingy ) i personally > wrap everything in a class when it can be represented as an object > ( a module can save you a lot of typing ) > > 2. when you want to override the standard method call behavior of VB.net > > like a better IIF > > Public Function IIf(Of T)(ByVal expression As Boolean, _ > ByVal truePart As T, ByVal falsePart As T) As T > > If expression Then > > Return truePart > > Else > > Return falsePart > > End If > > End Function > > This in a module will make anny call to iif in your code be redirected to > this "better" iif method so instead of having to change all your code you > can take advantage of language enhancements in the future by just writing > better methods as the language features ( in previous versions we did not > have generics , so in this situation it is a nice feature to have ) > > > > regards > > Michel Posseth [MCP] > > > > > > > > "Cor Ligthert [MVP]" <notmyfirstn***@planet.nl> schreef in bericht > news:OJ2o7aBmGHA.4064@TK2MSFTNGP02.phx.gbl... >> Bonzol, >> >> One of the thousand times asked question in this newsgroup. >> >> A module is a simple format of a Class with only Shared members. >> >> There is never a reason to use a module execpt if you have that already >> in your VB6 converted program. >> >> If you want to know more try a search on that in Google Newsgroups. >> >> http://groups.google.com/group/microsoft.public.dotnet.languages.vb/search?group=microsoft.public.dotnet.languages.vb&q=class+module&qt_g=1&searchnow=Search+this+group >> >> However feel free to ask this kind of questions again. You could not have >> knowed that it is so often asked. >> >> I hope that this gives an idea >> >> Cor >> >> "Bonzol" <Bon***@hotmail.com> schreef in bericht >> news:1151206097.131151.273950@p79g2000cwp.googlegroups.com... >>> vb.net >>> >>> Hey there, could someone just tell me what the differnce is between >>> classes and modules and when each one would be used compared to the >>> other? >>> >>> Any help would be great >>> >>> Thanx in advance >>> >> >> > > Michel Posseth [MCP] wrote:
> However here is also the catch why people in the full OOP camp say you To such people I like to say, Go tell that to System.Math :)> shouldn`t use modules > a NotInheritable(sealed) class which only consists of Shared (static) > methods is not very good object-oriented design. :-) -- Larry Lard Replies to group please Larry,
>> However here is also the catch why people in the full OOP camp say you Why are people not allowed by you to give their opinion?>> shouldn`t use modules >> a NotInheritable(sealed) class which only consists of Shared (static) >> methods is not very good object-oriented design. :-) > > To such people I like to say, Go tell that to System.Math :) What is wrong with trying to do things as good as possible. That their are still modules means that they have their pupose, but does not give people like you the right to tell that they should be used. Just my thought, Cor Show quoteHide quote "Larry Lard" <larryl***@hotmail.com> schreef in bericht news:1151315064.717622.187740@c74g2000cwc.googlegroups.com... > > Michel Posseth [MCP] wrote: > > -- > Larry Lard > Replies to group please > I forgot the :-)
Show quoteHide quote "Cor Ligthert [MVP]" <notmyfirstn***@planet.nl> schreef in bericht news:O8PlLkQmGHA.3752@TK2MSFTNGP02.phx.gbl... > Larry, > >>> However here is also the catch why people in the full OOP camp say you >>> shouldn`t use modules >>> a NotInheritable(sealed) class which only consists of Shared (static) >>> methods is not very good object-oriented design. :-) >> >> To such people I like to say, Go tell that to System.Math :) > > Why are people not allowed by you to give their opinion? > > What is wrong with trying to do things as good as possible. > > That their are still modules means that they have their pupose, but does > not give people like you the right to tell that they should be used. > > Just my thought, > > Cor > > > "Larry Lard" <larryl***@hotmail.com> schreef in bericht > news:1151315064.717622.187740@c74g2000cwc.googlegroups.com... >> >> Michel Posseth [MCP] wrote: >> >> -- >> Larry Lard >> Replies to group please >> > > Bonzol,
In addition to the other Comments. A Module is implicitly imported into every source file (effectively at the project level). This cannot be turned off. A Class with Shared methods (such as System.Math) needs to be explicitly imported into every source file or at the project level. Importing a class with shared methods allows to control if you want the members qualified or not. For example: Imports System.Math Public Module MainModule Public Sub Main() Dim d As Double = Sin(90) End Sub End Module verses: Public Module MainModule Public Sub Main() Dim d As Double = Math.Sin(90) End Sub End Module NOTE: When defining a class with only shared methods. I normally make it Notinheritable with a private constructor. This prevents other developers from creating an instance of the class and prevents inheriting from the class. Public NotInheritable Class Math Private Sub New End Sub Public Shared Function Sin(value As Double) As Double ... End Function End Class A Module (or static class in C# 2.0) simply doesn't have the constructor. CLI/C++ I find both classes with shared method & Modules beneficial in a fully OOP program. For example truly "global" functions such as System.Math or my Generic IIF don't really fit in an OO world, and lend themselves well to Modules... Normally I put utility/helper methods in a class with shared methods, for example methods that need to be used from both Pages & Controls in ASP.NET while instantiating a class doesn't really bring any value to the solution... -- Show quoteHide quoteHope this helps Jay B. Harlow [MVP - Outlook] ..NET Application Architect, Enthusiast, & Evangelist T.S. Bradley - http://www.tsbradley.net "Bonzol" <Bon***@hotmail.com> wrote in message news:1151206097.131151.273950@p79g2000cwp.googlegroups.com... | vb.net | | Hey there, could someone just tell me what the differnce is between | classes and modules and when each one would be used compared to the | other? | | Any help would be great | | Thanx in advance | Jay,
Basically I don't agree with you in this because that written modules as I have seen them are mostly used as an unordered bunch of fields. I hate that, but before answering you I took this time the effort by trying some things. That made that I came by this. Public Module GiveMySin Public Function MyFunction() As Double Return Sin(90) End Function End Module Public Class GiveMyCos Public Shared Function MyFunction() As Double Return Cos(90) End Function End Class I can call those by Dim a As Double = GiveMySin.MyFunction Dim b As Double = GiveMyCos.MyFunction I can use in both intellisence. Used as this however, does the module protect me from forgetting to write the shared key word or in other words don't make it even necessary to write that.. Therefore I am in doubt now if the module used in this format is not a better choice than the Shared Class. Or do you see that I miss something? :-) CorShow quoteHide quote "Jay B. Harlow [MVP - Outlook]" <Jay_Harlow_***@tsbradley.net> schreef in bericht news:e1OJRhRmGHA.464@TK2MSFTNGP05.phx.gbl... > Bonzol, > In addition to the other Comments. > > A Module is implicitly imported into every source file (effectively at the > project level). This cannot be turned off. > > A Class with Shared methods (such as System.Math) needs to be explicitly > imported into every source file or at the project level. > > Importing a class with shared methods allows to control if you want the > members qualified or not. For example: > > Imports System.Math > > Public Module MainModule > > Public Sub Main() > Dim d As Double = Sin(90) > End Sub > > End Module > > verses: > > Public Module MainModule > > Public Sub Main() > Dim d As Double = Math.Sin(90) > End Sub > > End Module > > > NOTE: When defining a class with only shared methods. I normally make it > Notinheritable with a private constructor. This prevents other developers > from creating an instance of the class and prevents inheriting from the > class. > > Public NotInheritable Class Math > > Private Sub New > End Sub > > Public Shared Function Sin(value As Double) As Double > ... > End Function > > End Class > > A Module (or static class in C# 2.0) simply doesn't have the constructor. > CLI/C++ > > I find both classes with shared method & Modules beneficial in a fully OOP > program. For example truly "global" functions such as System.Math or my > Generic IIF don't really fit in an OO world, and lend themselves well to > Modules... Normally I put utility/helper methods in a class with shared > methods, for example methods that need to be used from both Pages & > Controls > in ASP.NET while instantiating a class doesn't really bring any value to > the > solution... > > -- > Hope this helps > Jay B. Harlow [MVP - Outlook] > .NET Application Architect, Enthusiast, & Evangelist > T.S. Bradley - http://www.tsbradley.net > > > "Bonzol" <Bon***@hotmail.com> wrote in message > news:1151206097.131151.273950@p79g2000cwp.googlegroups.com... > | vb.net > | > | Hey there, could someone just tell me what the differnce is between > | classes and modules and when each one would be used compared to the > | other? > | > | Any help would be great > | > | Thanx in advance > | > > Cor,
| Therefore I am in doubt now if the module used in this format is not a I agree if you "make a point" to qualify the module member's name I would | better choice than the Shared Class. stay they are equal. Unfortunately the IDE does not require you to qualify the module member's name, nor does it require you to import the module name. This ease of unqualified access of a Module's members is why I consider a shared class is "better". Yes you need take extra steps to define the shared class. However generally you would define the class once, then use it a plethora of times. Its the use a plethora of times where the benefit of the shared class over a module is. When you prevent instantiating & inheriting a shared class, the compiler will tell you if you forget to share one of its members... Ideally I would prefer that VB introduce the equivalent of C#'s "static class", a class that requires all shared methods and has no constructor. Basically a Module that does not include the Microsoft.VisualBasic.CompilerServices.StandardModuleAttribute in the generated IL. As I understand that the StandardModuleAttribute is what is causing the implicit import. -- Show quoteHide quoteHope this helps Jay B. Harlow [MVP - Outlook] ..NET Application Architect, Enthusiast, & Evangelist T.S. Bradley - http://www.tsbradley.net "Cor Ligthert [MVP]" <notmyfirstn***@planet.nl> wrote in message news:Orz%23VLSmGHA.4512@TK2MSFTNGP04.phx.gbl... | Jay, | | Basically I don't agree with you in this because that written modules as I | have seen them are mostly used as an unordered bunch of fields. I hate that, | but before answering you I took this time the effort by trying some things. | | That made that I came by this. | | Public Module GiveMySin | Public Function MyFunction() As Double | Return Sin(90) | End Function | End Module | Public Class GiveMyCos | Public Shared Function MyFunction() As Double | Return Cos(90) | End Function | End Class | | I can call those by | | Dim a As Double = GiveMySin.MyFunction | Dim b As Double = GiveMyCos.MyFunction | | I can use in both intellisence. Used as this however, does the module | protect me from forgetting to write the shared key word or in other words | don't make it even necessary to write that.. | | Therefore I am in doubt now if the module used in this format is not a | better choice than the Shared Class. | | Or do you see that I miss something? | | :-) | | Cor | | | | | | | | | | | | | | | "Jay B. Harlow [MVP - Outlook]" <Jay_Harlow_***@tsbradley.net> schreef in | bericht news:e1OJRhRmGHA.464@TK2MSFTNGP05.phx.gbl... | > Bonzol, | > In addition to the other Comments. | > | > A Module is implicitly imported into every source file (effectively at the | > project level). This cannot be turned off. | > | > A Class with Shared methods (such as System.Math) needs to be explicitly | > imported into every source file or at the project level. | > | > Importing a class with shared methods allows to control if you want the | > members qualified or not. For example: | > | > Imports System.Math | > | > Public Module MainModule | > | > Public Sub Main() | > Dim d As Double = Sin(90) | > End Sub | > | > End Module | > | > verses: | > | > Public Module MainModule | > | > Public Sub Main() | > Dim d As Double = Math.Sin(90) | > End Sub | > | > End Module | > | > | > NOTE: When defining a class with only shared methods. I normally make it | > Notinheritable with a private constructor. This prevents other developers | > from creating an instance of the class and prevents inheriting from the | > class. | > | > Public NotInheritable Class Math | > | > Private Sub New | > End Sub | > | > Public Shared Function Sin(value As Double) As Double | > ... | > End Function | > | > End Class | > | > A Module (or static class in C# 2.0) simply doesn't have the constructor. | > CLI/C++ | > | > I find both classes with shared method & Modules beneficial in a fully OOP | > program. For example truly "global" functions such as System.Math or my | > Generic IIF don't really fit in an OO world, and lend themselves well to | > Modules... Normally I put utility/helper methods in a class with shared | > methods, for example methods that need to be used from both Pages & | > Controls | > in ASP.NET while instantiating a class doesn't really bring any value to | > the | > solution... | > | > -- | > Hope this helps | > Jay B. Harlow [MVP - Outlook] | > .NET Application Architect, Enthusiast, & Evangelist | > T.S. Bradley - http://www.tsbradley.net | > | > | > "Bonzol" <Bon***@hotmail.com> wrote in message | > news:1151206097.131151.273950@p79g2000cwp.googlegroups.com... | > | vb.net | > | | > | Hey there, could someone just tell me what the differnce is between | > | classes and modules and when each one would be used compared to the | > | other? | > | | > | Any help would be great | > | | > | Thanx in advance | > | | > | > | | Jay,
I agree, but than are we talking about the module as I showed, which has protection that it is not used in the not decided ways as you told. (If you don't understand what I mean by that reply) In fact do I find the names Shared or Static Class bad names, because it is in fact for me a module. (Not in VB or C terminology). Where I find Shared better because the use is currently absolute not Static anymore. With that not meaning that it in my eyes the name should be a module. Cor Show quoteHide quote "Jay B. Harlow [MVP - Outlook]" <Jay_Harlow_***@tsbradley.net> schreef in bericht news:%23sPQV4amGHA.4868@TK2MSFTNGP04.phx.gbl... > Cor, > | Therefore I am in doubt now if the module used in this format is not a > | better choice than the Shared Class. > I agree if you "make a point" to qualify the module member's name I would > stay they are equal. > > Unfortunately the IDE does not require you to qualify the module member's > name, nor does it require you to import the module name. This ease of > unqualified access of a Module's members is why I consider a shared class > is > "better". > > Yes you need take extra steps to define the shared class. However > generally > you would define the class once, then use it a plethora of times. Its the > use a plethora of times where the benefit of the shared class over a > module > is. When you prevent instantiating & inheriting a shared class, the > compiler > will tell you if you forget to share one of its members... > > Ideally I would prefer that VB introduce the equivalent of C#'s "static > class", a class that requires all shared methods and has no constructor. > Basically a Module that does not include the > Microsoft.VisualBasic.CompilerServices.StandardModuleAttribute in the > generated IL. As I understand that the StandardModuleAttribute is what is > causing the implicit import. > > -- > Hope this helps > Jay B. Harlow [MVP - Outlook] > .NET Application Architect, Enthusiast, & Evangelist > T.S. Bradley - http://www.tsbradley.net > > > "Cor Ligthert [MVP]" <notmyfirstn***@planet.nl> wrote in message > news:Orz%23VLSmGHA.4512@TK2MSFTNGP04.phx.gbl... > | Jay, > | > | Basically I don't agree with you in this because that written modules as > I > | have seen them are mostly used as an unordered bunch of fields. I hate > that, > | but before answering you I took this time the effort by trying some > things. > | > | That made that I came by this. > | > | Public Module GiveMySin > | Public Function MyFunction() As Double > | Return Sin(90) > | End Function > | End Module > | Public Class GiveMyCos > | Public Shared Function MyFunction() As Double > | Return Cos(90) > | End Function > | End Class > | > | I can call those by > | > | Dim a As Double = GiveMySin.MyFunction > | Dim b As Double = GiveMyCos.MyFunction > | > | I can use in both intellisence. Used as this however, does the module > | protect me from forgetting to write the shared key word or in other > words > | don't make it even necessary to write that.. > | > | Therefore I am in doubt now if the module used in this format is not a > | better choice than the Shared Class. > | > | Or do you see that I miss something? > | > | :-) > | > | Cor > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | "Jay B. Harlow [MVP - Outlook]" <Jay_Harlow_***@tsbradley.net> schreef > in > | bericht news:e1OJRhRmGHA.464@TK2MSFTNGP05.phx.gbl... > | > Bonzol, > | > In addition to the other Comments. > | > > | > A Module is implicitly imported into every source file (effectively at > the > | > project level). This cannot be turned off. > | > > | > A Class with Shared methods (such as System.Math) needs to be > explicitly > | > imported into every source file or at the project level. > | > > | > Importing a class with shared methods allows to control if you want > the > | > members qualified or not. For example: > | > > | > Imports System.Math > | > > | > Public Module MainModule > | > > | > Public Sub Main() > | > Dim d As Double = Sin(90) > | > End Sub > | > > | > End Module > | > > | > verses: > | > > | > Public Module MainModule > | > > | > Public Sub Main() > | > Dim d As Double = Math.Sin(90) > | > End Sub > | > > | > End Module > | > > | > > | > NOTE: When defining a class with only shared methods. I normally make > it > | > Notinheritable with a private constructor. This prevents other > developers > | > from creating an instance of the class and prevents inheriting from > the > | > class. > | > > | > Public NotInheritable Class Math > | > > | > Private Sub New > | > End Sub > | > > | > Public Shared Function Sin(value As Double) As Double > | > ... > | > End Function > | > > | > End Class > | > > | > A Module (or static class in C# 2.0) simply doesn't have the > constructor. > | > CLI/C++ > | > > | > I find both classes with shared method & Modules beneficial in a fully > OOP > | > program. For example truly "global" functions such as System.Math or > my > | > Generic IIF don't really fit in an OO world, and lend themselves well > to > | > Modules... Normally I put utility/helper methods in a class with > shared > | > methods, for example methods that need to be used from both Pages & > | > Controls > | > in ASP.NET while instantiating a class doesn't really bring any value > to > | > the > | > solution... > | > > | > -- > | > Hope this helps > | > Jay B. Harlow [MVP - Outlook] > | > .NET Application Architect, Enthusiast, & Evangelist > | > T.S. Bradley - http://www.tsbradley.net > | > > | > > | > "Bonzol" <Bon***@hotmail.com> wrote in message > | > news:1151206097.131151.273950@p79g2000cwp.googlegroups.com... > | > | vb.net > | > | > | > | Hey there, could someone just tell me what the differnce is between > | > | classes and modules and when each one would be used compared to the > | > | other? > | > | > | > | Any help would be great > | > | > | > | Thanx in advance > | > | > | > > | > > | > | > > |
|||||||||||||||||||||||