Co to znaczy, kiedy dodajesz słowo kluczowe static do metody?
public static void doSomething(){
//Well, do something!
}
Czy możesz dodać static
słowo kluczowe do zajęć? Co to by wtedy oznaczało?
Co to znaczy, kiedy dodajesz słowo kluczowe static do metody?
public static void doSomething(){
//Well, do something!
}
Czy możesz dodać static
słowo kluczowe do zajęć? Co to by wtedy oznaczało?
Odpowiedzi:
static
Funkcji, w przeciwieństwie do zwykłej ( np FUNCTION), a nie wiąże się z wystąpieniem klasy.
static
Klasa to klasa, która może zawierać tylko static
członkom, a zatem nie może być instancja.
Na przykład:
class SomeClass {
public int InstanceMethod() { return 1; }
public static int StaticMethod() { return 42; }
}
Aby zadzwonić InstanceMethod
, potrzebujesz instancji klasy:
SomeClass instance = new SomeClass();
instance.InstanceMethod(); //Fine
instance.StaticMethod(); //Won't compile
SomeClass.InstanceMethod(); //Won't compile
SomeClass.StaticMethod(); //Fine
Z innego punktu widzenia: zastanów się, czy chcesz wprowadzić pewne zmiany na pojedynczym łańcuchu. na przykład chcesz, aby litery były wielkimi literami i tak dalej. tworzysz inną klasę o nazwie „Narzędzia” dla tych działań. nie ma sensu tworzyć instancji klasy „Narzędzia”, ponieważ w tej klasie nie ma żadnego elementu dostępnego (porównaj z klasą „Osoba” lub „Nauczyciel”). Używamy więc statycznego słowa kluczowego, aby używać klasy "Narzędzia" bez tworzenia jej instancji, a po naciśnięciu kropki po nazwie klasy ("Narzędzia") można uzyskać dostęp do żądanych metod.
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();
}
}
}
Statyczną metodę, pole, właściwość lub zdarzenie można wywołać dla klasy, nawet jeśli nie utworzono żadnego wystąpienia tej klasy. Jeśli zostaną utworzone jakiekolwiek wystąpienia klasy, nie można ich użyć do uzyskania dostępu do statycznego elementu członkowskiego. Istnieje tylko jedna kopia statycznych pól i zdarzeń, a statyczne metody i właściwości mogą uzyskiwać dostęp tylko do pól statycznych i zdarzeń statycznych. Statyczne elementy członkowskie są często używane do reprezentowania danych lub obliczeń, które nie zmieniają się w odpowiedzi na stan obiektu; na przykład biblioteka matematyczna może zawierać statyczne metody obliczania sinusa i cosinusa. Elementy członkowskie klasy statycznej są deklarowane przy użyciu słowa kluczowego static przed zwracanym typem membe
Wkrótce nie można utworzyć instancji klasy statycznej: Ex:
static class myStaticClass
{
public static void someFunction()
{ /* */ }
}
Nie możesz zrobić tak:
myStaticClass msc = new myStaticClass(); // it will cause an error
Możesz zrobić tylko:
myStaticClass.someFunction();
Słowo kluczowe static zastosowane do klasy informuje kompilator, aby utworzył pojedyncze wystąpienie tej klasy. Nie jest wtedy możliwe „nowe” jednej lub więcej instancji tej klasy. Wszystkie metody w klasie statycznej muszą być zadeklarowane jako statyczne.
Możliwe i często pożądane jest posiadanie statycznych metod klasy niestatycznej. Na przykład metoda fabryczna podczas tworzenia instancji innej klasy jest często deklarowana jako statyczna, ponieważ oznacza to, że określone wystąpienie klasy zawierającej metodę współczynnika nie jest wymagane.
Aby uzyskać dobre wyjaśnienie, jak, kiedy i gdzie, zobacz MSDN
static
Klasa ma instancji w ogóle.