On 2008-11-11, Andy B <a_*****@sbcglo bal.netwrote:
>Your message is a bit confusing - the code you are showing seems to be a
combination of C# and VB :)
Oops! Sorry. I came from a C# background and I guess some of it still forces
me to think that way...grin.
I know what you mean - I am a C# programmer by day, so... :)
>When you say static class, I assume you are refering to the C# construct:
public static class AStaticClass
{
....
}
That's what I meant. A C# static class.
Ok... Then the VB.NET equivalent is a module.
>Where all members of the class have to be static. VB uses the keyword
Shared
rather then static for these sorts of methods. In VB Static applies to
local
variables that keep their value between calls to the method
Sounds a little confusing here. Have a simple example of how shared works?
Shared works like static in C# - only it can't be applied at the class level
(like C# v1).
Public Class MyClass
Public Shared Sub DoStuff ()
' Do Cool Stuff
End Sub
End Class
Calling code:
MyClass.DoStuff ()
You call the method by a reference to the class name, not an instance of the
class. For instance:
Dim m As New MyClass()
m.DoStuff () ' compiler warning - though vb.net does allow you to do this
The usage of static in VB.NET might look like:
Public Function SomeSub() As Integer
Static i As Integer = 0
i += 1
Return i
End Function
In another method:
For i As Intege = 1 To 10
Console.WriteLi ne (SomeSub())
Next
1
2
3
4
5
6
7
8
9
10
>Another point, static classes do NOT have instance members because,
thereare not instances of the class. So, members of a static class are
refered to as "class
members", since the belong to the class and not a particular instance.
OK. So the code I gave would have failed if it was converted to C# because
you can't have instances of classes in a static class. Once static, always
static...
No, you can have instances of classes in a static class (or module). The
difference is that there is only one instance of a class variable, no matter
how many instances of the class are created... For instance, the
implementation of a singleton in C# often looks like:
public class Singleton
{
private static Singleton instance = new Singleton();
private Singleton(){}
public static Singleton Instance
{
get
{
return instance;
}
}
public void DoCoolStuff()
{
// do stuff
}
}
usi
usage:
Singleton.Insta nce.DoStuff();
The point is that if you declare a value as Shared in a class, then it is
exactly that - shared across all instances.
>Now that we have some of that cleared up - lets dive in... The equivalent
of
the C# static class in VB.NET is a module.
Can you give an example of how to actually use the below in simple code?
>NameSpace MyNameSpace
Public Module MyModule
Private _newsContext As New EntityRecordsEn tity()
I didn't think you could have the line above in a "static class".
Sure you can...
>Public Sub DoStuff()
_newsContext.D oCoolStuff()
End Sub
End Module
End NameSpace
Usage:
MyNamespace.MyM odule.DoStuff ()
--
Tom Shelton