Możesz użyć metody statycznej bez tworzenia instancji tej klasy po prostu przez class_name.static_method_name ();
Javed Akram
Na poziomie programowania mamy wrażenie, że jesteśmy w stanie wywołać metodę statyczną bez tworzenia instancji klasy / typu. Wewnętrznie tak nie jest . Środowisko CLR wewnętrznie zarządza specjalną instancją zwaną instancją typu do zarządzania wywołaniami metod statycznych. Zobacz tę odpowiedź. To takie intrygujące.
RBT
Odpowiedzi:
313
staticFunkcji, w przeciwieństwie do zwykłej ( np FUNCTION), a nie wiąże się z wystąpieniem klasy.
staticKlasa to klasa, która może zawierać tylko staticczłonkom, a zatem nie może być instancja.
Więc to jest jak metoda klasowa zamiast metody instancji?
Moshe
4
@Moshe: Dokładnie. W przypadku metody statycznej nie potrzebujesz instancji klasy do wywołania metody, a jedynie klasę.
Binary Worrier
3
Ale czy rzeczywiście istnieje jakieś techniczne ograniczenie, które uniemożliwia wywołanie metody statycznej na instancji? Jeśli kompilator na to pozwoli, jakie jest niebezpieczeństwo, że będzie dostępny?
Gdzie „StaticMethod” jest metodą klasy, a „InstanceMethod” jest metodą instancji klasy SomeClass
Usman Younas
26
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{classProgram{staticvoidMain(string[] args){Console.WriteLine(Tools.ToUpperCase("Behnoud Sherafati"));Console.ReadKey();}}publicstaticclassTools{publicstaticstringToUpperCase(string str){return str.ToUpper();}}}
Używanie „dokonywania zmian w łańcuchu” jest złym przykładem - łańcuchy znaków są niezmienne i nie można ich zmienić. Ale w przeciwnym razie wyjaśnienie ma sens (zastąpienie niezmiennej klasy ciągiem znaków)
Flydog57
13
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
Funkcja statyczna oznacza, że jest powiązana z klasą (nie z konkretną instancją klasy, ale z samą klasą) i może być wywoływana nawet wtedy, gdy nie istnieją żadne instancje klas.
Klasa statyczna oznacza, że klasa zawiera tylko statyczne elementy członkowskie.
Dodanie słowa kluczowego „static” do metody oznacza, że podstawowa implementacja daje ten sam wynik dla każdej instancji klasy. Nie trzeba dodawać, że wynik zmienia się wraz ze zmianą wartości parametrów
Zmienna statyczna nie jest powiązana z obiektem klasy. Można uzyskać do niego dostęp za pomocą nazwy klasy. Wszystkie obiekty klasy będą współużytkować zmienną statyczną.
Uczyniając funkcję statyczną, ograniczy dostęp tej funkcji w tym pliku.
Rdzeń statycznego słowa kluczowego, że będziesz mieć tylko jedną kopię w pamięci RAM tej (metody / zmiennej / klasy), która jest wspólna dla wszystkich wywołań
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
Nie, klasa statyczna nigdy nie jest tworzona. Biorąc pod uwagę, że wszystko w nim jest statyczne, dlaczego miałbyś chcieć go utworzyć?
Jon Skeet
1
staticKlasa ma instancji w ogóle.
SLaks
4
Przepraszam, nie rozumiem ... Powiedziałem, że utworzono jedną instancję i nie można utworzyć nowej. Z pewnością zostanie utworzona pojedyncza, statyczna instancja, w przeciwnym razie kod nie byłby wywoływalny?
Dave Arkley
2
Klasa statyczna ma instancję, w rzeczywistości dwie nie są po prostu instancjami typu. Klasa statyczna będzie istnieć na stercie jako obiekt typu [Foo] Type (tablica wyszukiwania metod itp. Dla JIT) oraz specjalny obiekt System.Type używany do inicjalizacji.
mccainz
Klasę można zadeklarować jako statyczną, co oznacza, że zawiera tylko statyczne elementy członkowskie. Nie jest możliwe tworzenie instancji klasy statycznej przy użyciu słowa kluczowego new. Klasy statyczne są ładowane automatycznie przez środowisko wykonawcze języka wspólnego (CLR) platformy .NET Framework podczas ładowania programu lub przestrzeni nazw zawierającej klasę.
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ć tylkostatic
członkom, a zatem nie może być instancja.Na przykład:
Aby zadzwonić
InstanceMethod
, potrzebujesz instancji klasy:źródło
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.
źródło
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
źródło
Funkcja statyczna oznacza, że jest powiązana z klasą (nie z konkretną instancją klasy, ale z samą klasą) i może być wywoływana nawet wtedy, gdy nie istnieją żadne instancje klas.
Klasa statyczna oznacza, że klasa zawiera tylko statyczne elementy członkowskie.
źródło
Wkrótce nie można utworzyć instancji klasy statycznej: Ex:
Nie możesz zrobić tak:
Możesz zrobić tylko:
źródło
Dodanie słowa kluczowego „static” do metody oznacza, że podstawowa implementacja daje ten sam wynik dla każdej instancji klasy. Nie trzeba dodawać, że wynik zmienia się wraz ze zmianą wartości parametrów
źródło
Zmienna statyczna nie jest powiązana z obiektem klasy. Można uzyskać do niego dostęp za pomocą nazwy klasy. Wszystkie obiekty klasy będą współużytkować zmienną statyczną.
Uczyniając funkcję statyczną, ograniczy dostęp tej funkcji w tym pliku.
źródło
Rdzeń statycznego słowa kluczowego, że będziesz mieć tylko jedną kopię w pamięci RAM tej (metody / zmiennej / klasy), która jest wspólna dla wszystkich wywołań
źródło
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
źródło
static
Klasa ma instancji w ogóle.