What's a "static method" in C#?

258,741

Solution 1

A static function, unlike a regular (instance) function, is not associated with an instance of the class.

A static class is a class which can only contain static members, and therefore cannot be instantiated.

For example:

class SomeClass {
    public int InstanceMethod() { return 1; }
    public static int StaticMethod() { return 42; }
}

In order to call InstanceMethod, you need an instance of the class:

SomeClass instance = new SomeClass();
instance.InstanceMethod();   //Fine
instance.StaticMethod();     //Won't compile

SomeClass.InstanceMethod();  //Won't compile
SomeClass.StaticMethod();    //Fine

Solution 2

From another point of view: Consider that you want to make some changes on a single String. for example you want to make the letters Uppercase and so on. you make another class named "Tools" for these actions. there is no meaning of making instance of "Tools" class because there is not any kind of entity available inside that class (compare to "Person" or "Teacher" class). So we use static keyword in order to use "Tools" class without making any instance of that, and when you press dot after class name ("Tools") you can have access to the methods you want.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Tools.ToUpperCase("Behnoud Sherafati"));
        Console.ReadKey();
    }
}

public static class Tools
{
    public static string ToUpperCase(string str)
    {
        return str.ToUpper();

    }
}
}

Solution 3

A static method, field, property, or event is callable on a class even when no instance of the class has been created. If any instances of the class are created, they cannot be used to access the static member. Only one copy of static fields and events exists, and static methods and properties can only access static fields and static events. Static members are often used to represent data or calculations that do not change in response to object state; for instance, a math library might contain static methods for calculating sine and cosine. Static class members are declared using the static keyword before the return type of the membe

Solution 4

Shortly you can not instantiate the static class: Ex:

static class myStaticClass
{
    public static void someFunction()
    { /* */ }
}

You can not make like this:

myStaticClass msc = new myStaticClass();  // it will cause an error

You can make only:

myStaticClass.someFunction();

Solution 5

Static function means that it is associated with class (not a particular instance of class but the class itself) and it can be invoked even when no class instances exist.

Static class means that class contains only static members.

Share:
258,741

Related videos on Youtube

Moshe
Author by

Moshe

iOS Engineer Website | GitHub | Careers | App Store

Updated on September 24, 2020

Comments

  • Moshe
    Moshe almost 4 years

    What does it mean when you add the static keyword to a method?

    public static void doSomething(){
       //Well, do something!
    }
    

    Can you add the static keyword to class? What would it mean then?

    • Javed Akram
      Javed Akram over 13 years
      You can use static method without creating an instance of that class simply by class_name.static_method_name();
    • RBT
      RBT over 5 years
      At programming level, we get a feeling that we're able to call a static method without creating an instance of a class/type. Internally it is not the case. CLR internally manages a special instance called type instance for managing call to static methods. Please see this answer. It is so intriguing.
  • Moshe
    Moshe over 13 years
    So it's like a class method instead of an instance method?
  • Rabeel
    Rabeel over 13 years
    @Moshe: Exactly. With a static method you do not need an instance of the class to call the method, just the class.
  • Jon Skeet
    Jon Skeet over 13 years
    No, a static class is never instantiated. Given that everything in it is static, why would you want to instantiate it?
  • SLaks
    SLaks over 13 years
    A static class has no instance at all.
  • Dave Arkley
    Dave Arkley over 13 years
    Sorry guys, I don't understand...I said a single instance is created and you can't new one up. Surely a single, static, instance is created otherwise the code wouldn't be callable?
  • kroonwijk
    kroonwijk almost 13 years
    But is there actually some kind of technical limitation that prevents calling a static method on an instance? If the compiler would allow it, what is the danger of it being accessible?
  • SLaks
    SLaks almost 13 years
    @kroon: It wouldn't make any sense. Instance methods actually just take an instance as a hidden first parameter. Static methods don't. See my blog post: blog.slaks.net/2011/06/open-delegates-vs-closed-delegates.ht‌​ml
  • mccainz
    mccainz about 11 years
    A static class does have an instance, in fact two, they just aren't instances of theType. A static class will exist on the heap as a [Foo] Type object (method lookup table etc for the JIT), and a special System.Type object used for initialization.
  • Satheesh
    Satheesh almost 10 years
    A class can be declared static, indicating that it contains only static members. It is not possible to create instances of a static class using the new keyword. Static classes are loaded automatically by the .NET Framework common language runtime (CLR) when the program or namespace containing the class is loaded.
  • Usman Younas
    Usman Younas over 9 years
    Where "StaticMethod" is Class method and "InstanceMethod" is an Instance Method of Class SomeClass
  • Flydog57
    Flydog57 over 5 years
    Using "making changes on a string" is a bad example - strings are immutable and cannot be changed. But, otherwise, the explanation makes sense (substituting a non-immutable class for string)