Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to return a static class instance in c#

Tags:

c#

singleton

I would like to get an instance of a static class, but I can’t seem to do this without implementing a singleton wrapper on a non-static class– is this possible, or am I missing something?

public class MyInstanceTester
 {
    public MyInstanceTester()
    {
        //this is how i get a reference to a singleton now
        MyClass instance1 = MyClass.Instance();
        //this is what is would like to do (if only the compiler would let me)
        MyStaticClass instance2 = MyStaticClass.Instance();
    }
}


public class MyClass
{
    private static MyClass _myInstance;

    static MyClass()
    {
        _myInstance = new MyClass();
    }


    public static MyClass Instance()
    {
        return _myInstance;
    }

}

public static class MyStaticClass
{
    public static MyStaticClass Instance
    {
        get
        {
            return this;
        }
    }
}
like image 725
PeteN Avatar asked May 09 '12 10:05

PeteN


People also ask

How do I find the instance of a static class?

You can not return an instance of a static class as a static class by definition can not be instantiated. The singleton pattern just makes sure that you always return the same instance of a class.

Can a static method return an instance?

Static methods can access the static variables and static methods directly. Static methods can't access instance methods and instance variables directly. They must use reference to object. And static method can't use this keyword as there is no instance for 'this' to refer to.

Does a static class have an instance?

Static classes are sealed and therefore cannot be inherited. They cannot inherit from any class except Object. Static classes cannot contain an instance constructor. However, they can contain a static constructor.

What is static return method?

Whenever you return values from a static method they are either static nor instance by default, they are just values. The user invoking the method can use them as he wants. i.e. you can retrieve the values and declare them static.


2 Answers

There is no such thing as an instance of a static class. The singleton pattern simply returns the same instance of a class to repeated requests.

You may be getting confused by:

private static MyClass _myInstance;

This simply means that there will be a single instance of that particular object among all objects instantiated of the type that have _myInstance as a member.

A few notes:

  • The this keyword is not valid in a static member
  • If you have a static class then all members have to be static and so this will never be valid
  • A Singleton class cannot be a static class
  • Singletons declare a single static member to help ensure that only a single instance of that class exists
  • Note that a static reference to an object does not make the object static. Only the reference is static

Further reading: Jon Skeet has an excellent write up on implemeting Singletons in C# In Depth. I would suggest reading and studying this article until you grok it. It is quite good.

like image 95
Paul Sasik Avatar answered Sep 21 '22 11:09

Paul Sasik


There is no reason to return a instance to a static class ( If the class is static there is no instance ).

You can access the class from everywhere, why returning a instance to it? I can't imagine any reason to do this.

Static class usage

To use a static class just write it like below:

MyStaticClass.MyMethod();
Int32 callCount = MyStaticClass.CallCount;

As you can see it doesn't even make sense to declare a variable because this would just look like this:

MyStaticClass msc = MyStaticClass.Instance();
msc.MyMethod();
Int32 callCount = msc.CallCount;

If you want to have a shorter name you just can use:

 using MSC = MyNamespace.MyStaticClass;
like image 21
Felix K. Avatar answered Sep 21 '22 11:09

Felix K.