Of course the problem with this is that it it is not thread safe. You could
go with a hybrid:
public sealed class Singleton
{
private static Singleton TheSingleton = new Singleton();
public static Singleton Singleton
{
get { return sobjSingleton; }
}
private Singleton()
{
}
}
This doesn't have the on-demand property you require of course. But it is
nice and simple, and doesn't suffer from the public field problem.
--
Ian Griffiths
DevelopMentor
----- Original Message -----
From: "Stefan Holdermans" <[EMAIL PROTECTED]>
> Just to come up with a good reason to go for
>
> public sealed class Singleton
> {
> private static Singleton sobjSingleton;
>
> public static Singleton GetSingleton
> {
> if (sobjSingleton == null)
> sobjSingleton = new Singleton();
>
> return sobjSingleton;
> }
>
> private Singleton()
> {
> }
> }
>
> instead of the shorter
>
> public sealed class Singleton
> {
> public static Singleton TheSingleton = new Singleton();
>
> private Singleton()
> {
> }
> }
>
> The latter uses a public static field: we don't like to use these.
>
> But more important: the first approach creates the singleton instance on
> demand. The second approach just creates the instance, even if it isn't
> needed throughout the life of an AppDomain. Often singetons are
> issued 'heavy' objects: recall the in-memory database mentioned earlier in
> this thread. You typically don't want these big things created when you
> don't really need them.
>
> P.S. A last note on the sealed modifier that --- appearently --- seems so
> natural to us on singleton classes: consider singletons you can inherit
> from. Think of cases where you want only one instance for each sub class
> to be created.
You can read messages from the Advanced DOTNET archive, unsubscribe from Advanced
DOTNET, or
subscribe to other DevelopMentor lists at http://discuss.develop.com.